diff options
author | Mihai Popa <mihail.popa@gmail.com> | 2013-05-20 14:42:43 +0000 |
---|---|---|
committer | Mihai Popa <mihail.popa@gmail.com> | 2013-05-20 14:42:43 +0000 |
commit | dcf092272072ebfdbbde31326d33003bb33776d4 (patch) | |
tree | 6c03f08807f08d54c9467c4d10288235206f3573 /llvm/lib | |
parent | 92bbd3e818388503156fa632786d2205bba67069 (diff) | |
download | bcm5719-llvm-dcf092272072ebfdbbde31326d33003bb33776d4.tar.gz bcm5719-llvm-dcf092272072ebfdbbde31326d33003bb33776d4.zip |
Q registers are encoded in fields of the same length as D registers. As Q registers are half as many, the ARM reference manual mandates the least significant bit to be zeroed out. Failure to do so should result in an undefined instruction. With this change test/MC/Disassembler/ARM/invalid-VQADD-arm.txt is passing (removed XFAIL).
llvm-svn: 182279
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index c562cf7a717..aa59c98296c 100644 --- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -1048,7 +1048,7 @@ static const uint16_t QPRDecoderTable[] = { static DecodeStatus DecodeQPRRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const void *Decoder) { - if (RegNo > 31) + if (RegNo > 31 || (RegNo & 1) != 0) return MCDisassembler::Fail; RegNo >>= 1; |