mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-12 16:25:18 +00:00
Enforce the constraint that Rt must be even on LDRD/STRD instructions in ARM mode. Update tests to reflect this fact.
Patch by James Molloy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137647 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1094,6 +1094,21 @@ static bool DecodeAddrMode3Instruction(llvm::MCInst &Inst, unsigned Insn,
|
||||
unsigned P = fieldFromInstruction32(Insn, 24, 1);
|
||||
|
||||
bool writeback = (W == 1) | (P == 0);
|
||||
|
||||
// For {LD,ST}RD, Rt must be even, else undefined.
|
||||
switch (Inst.getOpcode()) {
|
||||
case ARM::STRD:
|
||||
case ARM::STRD_PRE:
|
||||
case ARM::STRD_POST:
|
||||
case ARM::LDRD:
|
||||
case ARM::LDRD_PRE:
|
||||
case ARM::LDRD_POST:
|
||||
if (Rt & 0x1) return false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (writeback) { // Writeback
|
||||
if (P)
|
||||
U |= ARMII::IndexModePre << 9;
|
||||
|
Reference in New Issue
Block a user