Follow the current hack set and enable the correct parsing of bkpt while in thumb...
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Tue, 18 Jan 2011 20:55:11 +0000 (20:55 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Tue, 18 Jan 2011 20:55:11 +0000 (20:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123772 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp
test/MC/ARM/arm_instructions.s
test/MC/ARM/thumb.s

index 6482087be2655b192efdc8a18874a45cb5f948e4..4948ad5e625353aa854662390255ffea26f160e4 100644 (file)
@@ -81,6 +81,8 @@ class ARMAsmParser : public TargetAsmParser {
   bool MatchAndEmitInstruction(SMLoc IDLoc,
                                SmallVectorImpl<MCParsedAsmOperand*> &Operands,
                                MCStreamer &Out);
+  void GetMnemonicAcceptInfo(StringRef Mnemonic, bool &CanAcceptCarrySet,
+                             bool &CanAcceptPredicationCode);
 
   /// @name Auto-generated Match Functions
   /// {
@@ -1169,8 +1171,11 @@ static StringRef SplitMnemonicAndCC(StringRef Mnemonic,
 /// inclusion of carry set or predication code operands.
 //
 // FIXME: It would be nice to autogen this.
-static void GetMnemonicAcceptInfo(StringRef Mnemonic, bool &CanAcceptCarrySet,
-                                  bool &CanAcceptPredicationCode) {
+void ARMAsmParser::
+GetMnemonicAcceptInfo(StringRef Mnemonic, bool &CanAcceptCarrySet,
+                      bool &CanAcceptPredicationCode) {
+  bool isThumb = TM.getSubtarget<ARMSubtarget>().isThumb();
+
   if (Mnemonic == "and" || Mnemonic == "lsl" || Mnemonic == "lsr" ||
       Mnemonic == "rrx" || Mnemonic == "ror" || Mnemonic == "sub" ||
       Mnemonic == "smull" || Mnemonic == "add" || Mnemonic == "adc" ||
@@ -1188,7 +1193,8 @@ static void GetMnemonicAcceptInfo(StringRef Mnemonic, bool &CanAcceptCarrySet,
       Mnemonic == "cps" || Mnemonic == "mcr2" || Mnemonic == "it" ||
       Mnemonic == "mcrr2" || Mnemonic == "cbz" || Mnemonic == "cdp2" ||
       Mnemonic == "trap" || Mnemonic == "mrc2" || Mnemonic == "mrrc2" ||
-      Mnemonic == "dsb" || Mnemonic == "movs") {
+      Mnemonic == "dsb" || Mnemonic == "movs" ||
+      (isThumb && Mnemonic == "bkpt")) {
     CanAcceptPredicationCode = false;
   } else {
     CanAcceptPredicationCode = true;
index 002e5eb262783a7c9ab4f302796c4d7dca84e6fe..cbcb09f13bdf2b035a9974a631094383b3a1209c 100644 (file)
 
 @ CHECK: bfi  r0, r0, #5, #7 @ encoding: [0x90,0x02,0xcb,0xe7]
         bfi  r0, r0, #5, #7
+
+@ CHECK: bkpt  #10 @ encoding: [0x7a,0x00,0x20,0xe1]
+        bkpt  #10
index 3d58521db5faa317f66314144441fec461ba0174..b34800a11620e6cd11561cc920eb85814dd9b7e1 100644 (file)
@@ -35,3 +35,6 @@
 
 @ CHECK: ldr   r3, [r1, r2]         @ encoding: [0x8b,0x58]
        ldr     r3, [r1, r2]
+
+@ CHECK: bkpt  #2                  @ encoding: [0x02,0xbe]
+         bkpt  #2