Thumb assembly support for SETEND instruction.
authorJim Grosbach <grosbach@apple.com>
Fri, 22 Jul 2011 17:52:23 +0000 (17:52 +0000)
committerJim Grosbach <grosbach@apple.com>
Fri, 22 Jul 2011 17:52:23 +0000 (17:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135778 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrThumb.td
lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h

index 7452addc15d551b08e4a375260f4cd5d0d68c0cc..cb242cec2c068237e5b1474814bdda228560797f 100644 (file)
@@ -245,23 +245,13 @@ def tBKPT : T1I<(outs), (ins i32imm:$val), NoItinerary, "bkpt\t$val",
   let Inst{7-0} = val;
 }
 
-def tSETENDBE : T1I<(outs), (ins), NoItinerary, "setend\tbe",
-                    [/* For disassembly only; pattern left blank */]>,
-                T1Encoding<0b101101> {
+def tSETEND : T1I<(outs), (ins setend_op:$end), NoItinerary, "setend\t$end",
+                  []>, T1Encoding<0b101101> {
+  bits<1> end;
   // A8.6.156
   let Inst{9-5} = 0b10010;
   let Inst{4}   = 1;
-  let Inst{3}   = 1;            // Big-Endian
-  let Inst{2-0} = 0b000;
-}
-
-def tSETENDLE : T1I<(outs), (ins), NoItinerary, "setend\tle",
-                    [/* For disassembly only; pattern left blank */]>,
-                T1Encoding<0b101101> {
-  // A8.6.156
-  let Inst{9-5} = 0b10010;
-  let Inst{4}   = 1;
-  let Inst{3}   = 0;            // Little-Endian
+  let Inst{3}   = end;
   let Inst{2-0} = 0b000;
 }
 
index 4f97def26e27b00433f4311a2af03d8bf249697a..85d62be60c12402aa4e3474313d0123e99da1710 100644 (file)
@@ -798,8 +798,7 @@ static bool DisassembleThumb1PushPop(MCInst &MI, unsigned Opcode, uint32_t insn,
 // tBKPT:            imm8
 // tNOP, tSEV, tYIELD, tWFE, tWFI:
 //   no operand (except predicate pair)
-// tSETENDBE, tSETENDLE, :
-//   no operand
+// tSETEND: i1
 // Others:           tRd tRn
 static bool DisassembleThumb1Misc(MCInst &MI, unsigned Opcode, uint32_t insn,
     unsigned short NumOps, unsigned &NumOpsAdded, BO B) {
@@ -860,6 +859,12 @@ static bool DisassembleThumb1Misc(MCInst &MI, unsigned Opcode, uint32_t insn,
     return true;
   }
 
+  if (Opcode == ARM::tSETEND) {
+    MI.addOperand(MCOperand::CreateImm(slice(insn, 3, 1)));
+    NumOpsAdded = 1;
+    return true;
+  }
+
   assert(NumOps >= 2 && OpInfo[0].RegClass == ARM::tGPRRegClassID &&
          (OpInfo[1].RegClass < 0 || OpInfo[1].RegClass==ARM::tGPRRegClassID)
          && "Expect >=2 operands");