mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
ARM: check predicate bits for thumb instructions
When encoded to thumb, VFP instruction and VMOV/VDUP between scalar and core registers, must have their predicate bit to 0b1110. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184707 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
07c3e159d8
commit
ebc3938ae7
@ -754,21 +754,25 @@ DecodeStatus ThumbDisassembler::getInstruction(MCInst &MI, uint64_t &Size,
|
||||
return result;
|
||||
}
|
||||
|
||||
MI.clear();
|
||||
result = decodeInstruction(DecoderTableVFP32, MI, insn32, Address, this, STI);
|
||||
if (result != MCDisassembler::Fail) {
|
||||
Size = 4;
|
||||
UpdateThumbVFPPredicate(MI);
|
||||
return result;
|
||||
if (fieldFromInstruction(insn32, 28, 4) == 0xE) {
|
||||
MI.clear();
|
||||
result = decodeInstruction(DecoderTableVFP32, MI, insn32, Address, this, STI);
|
||||
if (result != MCDisassembler::Fail) {
|
||||
Size = 4;
|
||||
UpdateThumbVFPPredicate(MI);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
MI.clear();
|
||||
result = decodeInstruction(DecoderTableNEONDup32, MI, insn32, Address,
|
||||
this, STI);
|
||||
if (result != MCDisassembler::Fail) {
|
||||
Size = 4;
|
||||
Check(result, AddThumbPredicate(MI));
|
||||
return result;
|
||||
if (fieldFromInstruction(insn32, 28, 4) == 0xE) {
|
||||
MI.clear();
|
||||
result = decodeInstruction(DecoderTableNEONDup32, MI, insn32, Address,
|
||||
this, STI);
|
||||
if (result != MCDisassembler::Fail) {
|
||||
Size = 4;
|
||||
Check(result, AddThumbPredicate(MI));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
if (fieldFromInstruction(insn32, 24, 8) == 0xF9) {
|
||||
|
9
test/MC/Disassembler/ARM/invalid-NEON-thumb.txt
Normal file
9
test/MC/Disassembler/ARM/invalid-NEON-thumb.txt
Normal file
@ -0,0 +1,9 @@
|
||||
# VMOV/VDUP between scalar and core registers with invalid predicate bits (pred != 0b1110)
|
||||
|
||||
# VMOV
|
||||
# RUN: echo "0x00 0xde 0x10 0x0b" | llvm-mc -triple thumbv7 -disassemble 2>&1 | FileCheck %s
|
||||
|
||||
# VDUP
|
||||
# RUN: echo "0xff 0xde 0xf0 0xfb" | llvm-mc -triple thumbv7 -disassemble 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: invalid instruction encoding
|
9
test/MC/Disassembler/ARM/invalid-VFP-thumb.txt
Normal file
9
test/MC/Disassembler/ARM/invalid-VFP-thumb.txt
Normal file
@ -0,0 +1,9 @@
|
||||
# VFP instructions with invalid predicate bits (pred != 0b1110)
|
||||
|
||||
# VABS
|
||||
# RUN: echo "0x40 0xde 0x00 0x0a" | llvm-mc -triple thumbv7 -disassemble 2>&1 | FileCheck %s
|
||||
|
||||
# VMLA
|
||||
# RUN: echo "0xf0 0xde 0xe0 0x0b" | llvm-mc -triple thumbv7 -disassemble 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: invalid instruction encoding
|
Loading…
x
Reference in New Issue
Block a user