Add a FIXME and two asserts for now in the ARMAsmParser when it sees .code 16 or
authorKevin Enderby <enderby@apple.com>
Thu, 13 Jan 2011 01:07:01 +0000 (01:07 +0000)
committerKevin Enderby <enderby@apple.com>
Thu, 13 Jan 2011 01:07:01 +0000 (01:07 +0000)
.code 32 if the TargetMachine's isThumb() boolean does not match.  The correct
fix is to switch ARM subtargets at that point and is tracked by rdar://8856789
which is bigger task.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123353 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp

index 2aabd0261993b9f1c76937880845f0ce4937d649..c8ffa267ac1a51ceb2117c2666b9ec6d13de0a64 100644 (file)
@@ -1351,10 +1351,20 @@ bool ARMAsmParser::ParseDirectiveCode(SMLoc L) {
     return Error(Parser.getTok().getLoc(), "unexpected token in directive");
   Parser.Lex();
 
-  if (Val == 16)
+  // FIXME: We need to be able switch subtargets at this point so that
+  // MatchInstructionImpl() will work when it gets the AvailableFeatures which
+  // includes Feature_IsThumb or not to match the right instructions.  This is
+  // blocked on the FIXME in llvm-mc.cpp when creating the TargetMachine.
+  if (Val == 16){
+    assert(TM.getSubtarget<ARMSubtarget>().isThumb() &&
+          "switching between arm/thumb not yet suppported via .code 16)");
     getParser().getStreamer().EmitAssemblerFlag(MCAF_Code16);
-  else
+  }
+  else{
+    assert(!TM.getSubtarget<ARMSubtarget>().isThumb() &&
+           "switching between thumb/arm not yet suppported via .code 32)");
     getParser().getStreamer().EmitAssemblerFlag(MCAF_Code32);
+   }
 
   return false;
 }