aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-03-09 20:01:14 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-03-09 20:01:14 +0000
commit9363d41f1419282db17003934851e9f524d54305 (patch)
tree050ee4fa4212d568fb17e514bed0f4bd905b7cc3 /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
parent787ba0bf9b8f8c7c235495ab85cae842be16b978 (diff)
downloadllvm-9363d41f1419282db17003934851e9f524d54305.zip
llvm-9363d41f1419282db17003934851e9f524d54305.tar.gz
llvm-9363d41f1419282db17003934851e9f524d54305.tar.bz2
LLVM combines the offset mode of A8.6.199 A1 & A2 into STRBT.
The insufficient encoding information of the combined instruction confuses the decoder wrt UQADD16. Add extra logic to recover from that. Fixed an assert reported by Sean Callanan llvm-svn: 127354
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 78d73d3..54b13dc 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -94,6 +94,9 @@ static unsigned decodeARMInstruction(uint32_t &insn) {
// As a result, the decoder fails to deocode USAT properly.
if (slice(insn, 27, 21) == 0x37 && slice(insn, 5, 4) == 1)
return ARM::USAT;
+ // As a result, the decoder fails to deocode UQADD16 properly.
+ if (slice(insn, 27, 20) == 0x66 && slice(insn, 7, 4) == 1)
+ return ARM::UQADD16;
// Ditto for ADDSrs, which is a super-instruction for A8.6.7 & A8.6.8.
// As a result, the decoder fails to decode UMULL properly.