Reject invalid imod values in t2CPS instructions.
authorOwen Anderson <resistor@mac.com>
Mon, 22 Aug 2011 23:44:04 +0000 (23:44 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 22 Aug 2011 23:44:04 +0000 (23:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138306 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrFormats.td
lib/Target/ARM/Disassembler/ARMDisassembler.cpp

index eba55944d2ddf0ba83d4cf497f30a074ba180477..6056eb9322bd0b8dff6096382e62c7965ec63986 100644 (file)
@@ -134,6 +134,7 @@ def VFPNeonA8Domain : Domain<5>; // Instructions in VFP & Neon under A8
 // ARM imod and iflag operands, used only by the CPS instruction.
 def imod_op : Operand<i32> {
   let PrintMethod = "printCPSIMod";
+  let DecoderMethod = "DecodeCPSIMod";
 }
 
 def ProcIFlagsOperand : AsmOperandClass {
index db35c1891c0396fd0b4fc27f5b3fb220574b7e5a..cc2a583ab87cb12853839790ca7594053f1635c4 100644 (file)
@@ -179,7 +179,8 @@ static DecodeStatus DecodeVMOVSRR(llvm::MCInst &Inst, unsigned Insn,
                                uint64_t Address, const void *Decoder);
 static DecodeStatus DecodeVMOVRRS(llvm::MCInst &Inst, unsigned Insn,
                                uint64_t Address, const void *Decoder);
-
+static DecodeStatus DecodeCPSIMod(llvm::MCInst &Inst, unsigned Insn,
+                               uint64_t Address, const void *Decoder);
 
 static DecodeStatus DecodeThumbAddSpecialReg(llvm::MCInst &Inst, uint16_t Insn,
                                uint64_t Address, const void *Decoder);
@@ -3240,3 +3241,11 @@ static DecodeStatus DecodeVMOVRRS(llvm::MCInst &Inst, unsigned Insn,
 
   return S;
 }
+
+static DecodeStatus DecodeCPSIMod(llvm::MCInst &Inst, unsigned Val,
+                                 uint64_t Address, const void *Decoder) {
+  if (Val == 0x1) return Fail;
+  Inst.addOperand(MCOperand::CreateImm(Val));
+  return Success;
+}
+