diff options
author | Kevin Enderby <enderby@apple.com> | 2012-03-06 18:33:12 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2012-03-06 18:33:12 +0000 |
commit | 520eb3ba8a4eaf91f8d0b4c5a49ab9e01314ecff (patch) | |
tree | 88dc6f40c24b560cdfa6f5c8252c3c750950b6ed /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | |
parent | 492488271f94e7eef3fca95c4a972a092be481cd (diff) | |
download | bcm5719-llvm-520eb3ba8a4eaf91f8d0b4c5a49ab9e01314ecff.tar.gz bcm5719-llvm-520eb3ba8a4eaf91f8d0b4c5a49ab9e01314ecff.zip |
Fix a bug in the ARM disassembly of the neon VLD2 all lanes instruction.
llvm-svn: 152127
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index 4101f596bf0..2d408e77aa4 100644 --- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -2556,17 +2556,14 @@ static DecodeStatus DecodeVLD2DupInstruction(llvm::MCInst &Inst, unsigned Insn, unsigned Rm = fieldFromInstruction32(Insn, 0, 4); unsigned align = fieldFromInstruction32(Insn, 4, 1); unsigned size = 1 << fieldFromInstruction32(Insn, 6, 2); - unsigned inc = fieldFromInstruction32(Insn, 5, 1) + 1; + unsigned pred = fieldFromInstruction32(Insn, 22, 4); align *= 2*size; if (!Check(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder))) return MCDisassembler::Fail; - if (!Check(S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder))) - return MCDisassembler::Fail; - if (Rm != 0xF) { - if (!Check(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder))) - return MCDisassembler::Fail; - } + + if (Rm != 0xF) + Inst.addOperand(MCOperand::CreateImm(0)); if (!Check(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder))) return MCDisassembler::Fail; @@ -2579,6 +2576,9 @@ static DecodeStatus DecodeVLD2DupInstruction(llvm::MCInst &Inst, unsigned Insn, return MCDisassembler::Fail; } + if (!Check(S, DecodePredicateOperand(Inst, pred, Address, Decoder))) + return MCDisassembler::Fail; + return S; } |