mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Be stricter in enforcing IT instruction predicate values, so that we don't end up trying to print out an illegal predicate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138443 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
// IT block predicate field
|
// IT block predicate field
|
||||||
def it_pred : Operand<i32> {
|
def it_pred : Operand<i32> {
|
||||||
let PrintMethod = "printMandatoryPredicateOperand";
|
let PrintMethod = "printMandatoryPredicateOperand";
|
||||||
|
let DecoderMethod = "DecodeITCond";
|
||||||
}
|
}
|
||||||
|
|
||||||
// IT block condition mask
|
// IT block condition mask
|
||||||
|
@@ -228,6 +228,8 @@ static DecodeStatus DecodeThumbBCCTargetOperand(llvm::MCInst &Inst,unsigned Val,
|
|||||||
uint64_t Address, const void *Decoder);
|
uint64_t Address, const void *Decoder);
|
||||||
static DecodeStatus DecodeThumbBLTargetOperand(llvm::MCInst &Inst, unsigned Val,
|
static DecodeStatus DecodeThumbBLTargetOperand(llvm::MCInst &Inst, unsigned Val,
|
||||||
uint64_t Address, const void *Decoder);
|
uint64_t Address, const void *Decoder);
|
||||||
|
static DecodeStatus DecodeITCond(llvm::MCInst &Inst, unsigned Val,
|
||||||
|
uint64_t Address, const void *Decoder);
|
||||||
|
|
||||||
#include "ARMGenDisassemblerTables.inc"
|
#include "ARMGenDisassemblerTables.inc"
|
||||||
#include "ARMGenInstrInfo.inc"
|
#include "ARMGenInstrInfo.inc"
|
||||||
@@ -3289,3 +3291,15 @@ static DecodeStatus DecodeVMOVRRS(llvm::MCInst &Inst, unsigned Insn,
|
|||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DecodeStatus DecodeITCond(llvm::MCInst &Inst, unsigned Cond,
|
||||||
|
uint64_t Address, const void *Decoder) {
|
||||||
|
DecodeStatus S = Success;
|
||||||
|
if (Cond == 0xF) {
|
||||||
|
Cond = 0xE;
|
||||||
|
CHECK(S, Unpredictable);
|
||||||
|
}
|
||||||
|
|
||||||
|
Inst.addOperand(MCOperand::CreateImm(Cond));
|
||||||
|
return S;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user