//===----------------------------------------------------------------------===//
#include "ARM.h"
-#include "llvm/Module.h"
-#include "llvm/Target/TargetRegistry.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/TargetRegistry.h"
using namespace llvm;
-Target llvm::TheARMTarget;
-
-static unsigned ARM_JITMatchQuality() {
-#if defined(__arm__)
- return 10;
-#endif
- return 0;
-}
-
-static unsigned ARM_TripleMatchQuality(const std::string &TT) {
- // Match arm-foo-bar, as well as things like armv5blah-*
- if (TT.size() >= 4 &&
- (TT.substr(0, 4) == "arm-" || TT.substr(0, 4) == "armv"))
- return 20;
-
- return 0;
-}
-
-static unsigned ARM_ModuleMatchQuality(const Module &M) {
- // Check for a triple match.
- if (unsigned Q = ARM_TripleMatchQuality(M.getTargetTriple()))
- return Q;
-
- // Otherwise if the target triple is non-empty, we don't match.
- if (!M.getTargetTriple().empty()) return 0;
-
- if (M.getEndianness() == Module::LittleEndian &&
- M.getPointerSize() == Module::Pointer32)
- return 10; // Weak match
- else if (M.getEndianness() != Module::AnyEndianness ||
- M.getPointerSize() != Module::AnyPointerSize)
- return 0; // Match for some other target
-
- return ARM_JITMatchQuality()/2;
-}
-
-Target llvm::TheThumbTarget;
-
-static unsigned Thumb_JITMatchQuality() {
-#if defined(__thumb__)
- return 10;
-#endif
- return 0;
-}
-
-static unsigned Thumb_TripleMatchQuality(const std::string &TT) {
- // Match thumb-foo-bar, as well as things like thumbv5blah-*
- if (TT.size() >= 6 &&
- (TT.substr(0, 6) == "thumb-" || TT.substr(0, 6) == "thumbv"))
- return 20;
-
- return 0;
-}
-
-static unsigned Thumb_ModuleMatchQuality(const Module &M) {
- // Check for a triple match.
- if (unsigned Q = Thumb_TripleMatchQuality(M.getTargetTriple()))
- return Q;
-
- // Otherwise if the target triple is non-empty, we don't match.
- if (!M.getTargetTriple().empty()) return 0;
-
- if (M.getEndianness() == Module::LittleEndian &&
- M.getPointerSize() == Module::Pointer32)
- return 10; // Weak match
- else if (M.getEndianness() != Module::AnyEndianness ||
- M.getPointerSize() != Module::AnyPointerSize)
- return 0; // Match for some other target
-
- return Thumb_JITMatchQuality()/2;
-}
+Target llvm::TheARMTarget, llvm::TheThumbTarget;
extern "C" void LLVMInitializeARMTargetInfo() {
- TargetRegistry::RegisterTarget(TheARMTarget, "arm",
- "ARM",
- &ARM_TripleMatchQuality,
- &ARM_ModuleMatchQuality,
- &ARM_JITMatchQuality);
+ RegisterTarget<Triple::arm, /*HasJIT=*/true>
+ X(TheARMTarget, "arm", "ARM");
- TargetRegistry::RegisterTarget(TheThumbTarget, "thumb",
- "Thumb",
- &Thumb_TripleMatchQuality,
- &Thumb_ModuleMatchQuality,
- &Thumb_JITMatchQuality);
+ RegisterTarget<Triple::thumb, /*HasJIT=*/true>
+ Y(TheThumbTarget, "thumb", "Thumb");
}