For pre-v6t2 targets, only select MOVi32imm if the immediate can be handled with...
[oota-llvm.git] / lib / Target / ARM / ARMTargetMachine.cpp
index 1cef36689d6c8eea019a9b52a24863ec11f84b10..81279d257c013a6adc4195434214170fe8b203c8 100644 (file)
@@ -45,7 +45,8 @@ static MCStreamer *createMCStreamer(const Target &T, const std::string &TT,
   case Triple::MinGW64:
   case Triple::Cygwin:
   case Triple::Win32:
-    assert(0 && "ARM does not support Windows COFF format"); break;
+    llvm_unreachable("ARM does not support Windows COFF format");
+    return NULL;
   default:
     return createELFStreamer(Ctx, TAB, _OS, _Emitter, RelaxAll);
   }
@@ -66,6 +67,12 @@ extern "C" void LLVMInitializeARMTarget() {
   TargetRegistry::RegisterCodeEmitter(TheThumbTarget,
                                       createARMMCCodeEmitter);
 
+  // Register the asm backend.
+  TargetRegistry::RegisterAsmBackend(TheARMTarget,
+                                     createARMAsmBackend);
+  TargetRegistry::RegisterAsmBackend(TheThumbTarget,
+                                     createARMAsmBackend);
+
   // Register the object streamer.
   TargetRegistry::RegisterObjectStreamer(TheARMTarget,
                                          createMCStreamer);
@@ -84,17 +91,20 @@ ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T,
     Subtarget(TT, FS, isThumb),
     FrameInfo(Subtarget),
     JITInfo(),
-    InstrItins(Subtarget.getInstrItineraryData()),
-    DataLayout(Subtarget.getDataLayout()),
-    ELFWriterInfo(*this)
+    InstrItins(Subtarget.getInstrItineraryData())
 {
   DefRelocModel = getRelocationModel();
 }
 
 ARMTargetMachine::ARMTargetMachine(const Target &T, const std::string &TT,
                                    const std::string &FS)
-  : ARMBaseTargetMachine(T, TT, FS, false),
-    InstrInfo(Subtarget),
+  : ARMBaseTargetMachine(T, TT, FS, false), InstrInfo(Subtarget),
+    DataLayout(Subtarget.isAPCS_ABI() ?
+               std::string("e-p:32:32-f64:32:64-i64:32:64-"
+                           "v128:32:128-v64:32:64-n32") :
+               std::string("e-p:32:32-f64:64:64-i64:64:64-"
+                           "v128:64:128-v64:64:64-n32")),
+    ELFWriterInfo(*this),
     TLInfo(*this),
     TSInfo(*this) {
   if (!Subtarget.hasARMOps())
@@ -108,6 +118,14 @@ ThumbTargetMachine::ThumbTargetMachine(const Target &T, const std::string &TT,
     InstrInfo(Subtarget.hasThumb2()
               ? ((ARMBaseInstrInfo*)new Thumb2InstrInfo(Subtarget))
               : ((ARMBaseInstrInfo*)new Thumb1InstrInfo(Subtarget))),
+    DataLayout(Subtarget.isAPCS_ABI() ?
+               std::string("e-p:32:32-f64:32:64-i64:32:64-"
+                           "i16:16:32-i8:8:32-i1:8:32-"
+                           "v128:32:128-v64:32:64-a:0:32-n32") :
+               std::string("e-p:32:32-f64:64:64-i64:64:64-"
+                           "i16:16:32-i8:8:32-i1:8:32-"
+                           "v128:64:128-v64:64:64-a:0:32-n32")),
+    ELFWriterInfo(*this),
     TLInfo(*this),
     TSInfo(*this) {
 }