[ARM64] Use PStateMapper to ensure that MSRcpsr operands are validated during disasse...
authorBradley Smith <bradley.smith@arm.com>
Wed, 9 Apr 2014 14:42:56 +0000 (14:42 +0000)
committerBradley Smith <bradley.smith@arm.com>
Wed, 9 Apr 2014 14:42:56 +0000 (14:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205873 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM64/Disassembler/ARM64Disassembler.cpp

index 3712d2256ec734de310bd2180954ee3735e6692a..667603ca0c398855126093225422822431f18503 100644 (file)
@@ -1579,10 +1579,15 @@ static DecodeStatus DecodeSystemCPSRInstruction(llvm::MCInst &Inst,
   uint64_t op2 = fieldFromInstruction(insn, 5, 3);
   uint64_t crm = fieldFromInstruction(insn, 8, 4);
 
-  Inst.addOperand(MCOperand::CreateImm((op1 << 3) | op2));
+  uint64_t cpsr_field = (op1 << 3) | op2;
+
+  Inst.addOperand(MCOperand::CreateImm(cpsr_field));
   Inst.addOperand(MCOperand::CreateImm(crm));
 
-  return Success;
+  bool ValidNamed;
+  (void)ARM64PState::PStateMapper().toString(cpsr_field, ValidNamed);
+  
+  return ValidNamed ? Success : Fail;
 }
 
 static DecodeStatus DecodeTestAndBranch(llvm::MCInst &Inst, uint32_t insn,