aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r--lib/Target/X86/X86TargetMachine.cpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index 76d0165c86..8c4e5d02be 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -22,27 +22,34 @@
#include "llvm/Target/TargetRegistry.h"
using namespace llvm;
+static const TargetAsmInfo *createTargetAsmInfo(const Target &T,
+ const StringRef &TT) {
+ Triple TheTriple(TT);
+ switch (TheTriple.getOS()) {
+ case Triple::Darwin:
+ return new X86DarwinTargetAsmInfo(TheTriple);
+ case Triple::MinGW32:
+ case Triple::MinGW64:
+ case Triple::Cygwin:
+ return new X86COFFTargetAsmInfo(TheTriple);
+ case Triple::Win32:
+ return new X86WinTargetAsmInfo(TheTriple);
+ default:
+ return new X86ELFTargetAsmInfo(TheTriple);
+ }
+}
+
extern "C" void LLVMInitializeX86Target() {
// Register the target.
RegisterTargetMachine<X86_32TargetMachine> X(TheX86_32Target);
RegisterTargetMachine<X86_64TargetMachine> Y(TheX86_64Target);
-}
-const TargetAsmInfo *X86TargetMachine::createTargetAsmInfo() const {
- switch (Subtarget.TargetType) {
- default: llvm_unreachable("unknown subtarget type");
- case X86Subtarget::isDarwin:
- return new X86DarwinTargetAsmInfo(*this);
- case X86Subtarget::isELF:
- return new X86ELFTargetAsmInfo(*this);
- case X86Subtarget::isMingw:
- case X86Subtarget::isCygwin:
- return new X86COFFTargetAsmInfo(*this);
- case X86Subtarget::isWindows:
- return new X86WinTargetAsmInfo(*this);
- }
+ // Register the target asm info.
+ RegisterAsmInfoFn A(TheX86_32Target, createTargetAsmInfo);
+ RegisterAsmInfoFn B(TheX86_64Target, createTargetAsmInfo);
}
+
X86_32TargetMachine::X86_32TargetMachine(const Target &T, const std::string &TT,
const std::string &FS)
: X86TargetMachine(T, TT, FS, false) {