mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
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).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182279 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44b486ed78
commit
bac932e9c3
@ -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;
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
# RUN: llvm-mc --disassemble %s -triple=armv7-unknown-unknwon -mcpu=cortex-a8 2>&1 | grep "invalid instruction encoding"
|
||||
# XFAIL: *
|
||||
# RUN: llvm-mc --disassemble %s -triple=armv7-unknown-unknwon -mcpu=cortex-a8 2>&1 | FileCheck %s
|
||||
|
||||
# Opcode=1225 Name=VQADDsv16i8 Format=ARM_FORMAT_N3Reg(37)
|
||||
# 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
||||
@ -9,3 +8,4 @@
|
||||
#
|
||||
# Qm -> bit[0] == 0, otherwise UNDEFINED
|
||||
0xdb 0xe0 0x40 0xf2
|
||||
# CHECK: invalid instruction encoding
|
||||
|
Loading…
Reference in New Issue
Block a user