summaryrefslogtreecommitdiff
path: root/lib/Target
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
commit18b475f95478f130667faa8c74bea4efdf68b1ed (patch)
tree2d863ec19723f6f7b7eff7687afa0be7f09540b1 /lib/Target
parentf607abdf7bd57d4c2fa0d47108b5ffa1a02cf699 (diff)
downloadllvm-18b475f95478f130667faa8c74bea4efdf68b1ed.tar.gz
llvm-18b475f95478f130667faa8c74bea4efdf68b1ed.tar.bz2
llvm-18b475f95478f130667faa8c74bea4efdf68b1ed.tar.xz
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127354 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r--lib/Target/ARM/Disassembler/ARMDisassembler.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 78d73d3a27..54b13dc21a 100644
--- a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/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.