mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 06:25:18 +00:00
A8.6.399 VSTM:
VFP Load/Store Multiple Instructions used to embed the IA/DB addressing mode within the MC instruction; that has been changed so that now, for example, VSTMDDB_UPD and VSTMDIA_UPD are two instructions. Update the ARMDisassemblerCore.cpp's DisassembleVFPLdStMulFrm() to reflect the change. Also add a test case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128103 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1799,9 +1799,8 @@ static bool DisassembleVFPLdStFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
|
||||
}
|
||||
|
||||
// VFP Load/Store Multiple Instructions.
|
||||
// This is similar to the algorithm for LDM/STM in that operand 0 (the base) and
|
||||
// operand 1 (the AM4 mode imm) is followed by two predicate operands. It is
|
||||
// followed by a reglist of either DPR(s) or SPR(s).
|
||||
// We have an optional write back reg, the base, and two predicate operands.
|
||||
// It is then followed by a reglist of either DPR(s) or SPR(s).
|
||||
//
|
||||
// VLDMD[_UPD], VLDMS[_UPD], VSTMD[_UPD], VSTMS[_UPD]
|
||||
static bool DisassembleVFPLdStMulFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
|
||||
@@ -1826,15 +1825,6 @@ static bool DisassembleVFPLdStMulFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
|
||||
|
||||
MI.addOperand(MCOperand::CreateReg(Base));
|
||||
|
||||
// Next comes the AM4 Opcode.
|
||||
ARM_AM::AMSubMode SubMode = getAMSubModeForBits(getPUBits(insn));
|
||||
// Must be either "ia" or "db" submode.
|
||||
if (SubMode != ARM_AM::ia && SubMode != ARM_AM::db) {
|
||||
DEBUG(errs() << "Illegal addressing mode 4 sub-mode!\n");
|
||||
return false;
|
||||
}
|
||||
MI.addOperand(MCOperand::CreateImm(ARM_AM::getAM4ModeImm(SubMode)));
|
||||
|
||||
// Handling the two predicate operands before the reglist.
|
||||
int64_t CondVal = insn >> ARMII::CondShift;
|
||||
MI.addOperand(MCOperand::CreateImm(CondVal == 0xF ? 0xE : CondVal));
|
||||
|
Reference in New Issue
Block a user