diff options
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler')
| -rw-r--r-- | llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index 57642e1924e..bf0dabb4a0f 100644 --- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -1523,6 +1523,8 @@ DecodeAddrMode2IdxInstruction(MCInst &Inst, unsigned Insn,          return MCDisassembler::Fail;      }      unsigned amt = fieldFromInstruction(Insn, 7, 5); +    if (Opc == ARM_AM::ror && amt == 0) +      Opc = ARM_AM::rrx;      unsigned imm = ARM_AM::getAM2Opc(Op, amt, Opc, idx_mode);      Inst.addOperand(MCOperand::CreateImm(imm)); @@ -1564,6 +1566,9 @@ static DecodeStatus DecodeSORegMemOperand(MCInst &Inst, unsigned Val,        break;    } +  if (ShOp == ARM_AM::ror && imm == 0) +    ShOp = ARM_AM::rrx; +    if (!Check(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))      return MCDisassembler::Fail;    if (!Check(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder))) | 

