VirtualBox

Changeset 105734 in vbox


Ignore:
Timestamp:
Aug 19, 2024 5:06:09 PM (6 weeks ago)
Author:
vboxsync
Message:

Disassembler/ARMv8: Refactoring and updates, among others make it possible to decode system register names in mrs/msr instructions, bugref:10388 [build fix]

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/armv8.h

    r105732 r105734  
    284284             | (((a_CRm) & 0xf) <<  3) \
    285285             |  ((a_Op2) & 0x7))
     286#define ARMV8_AARCH64_SYSREG_ID_CREATE_DYN(a_Op0, a_Op1, a_CRn, a_CRm, a_Op2) \
     287    (uint16_t)(  (((a_Op0) & 0x3) << 14) \
     288               | (((a_Op1) & 0x7) << 11) \
     289               | (((a_CRn) & 0xf) <<  7) \
     290               | (((a_CRm) & 0xf) <<  3) \
     291               |  ((a_Op2) & 0x7))
    286292/** Returns the internal system register ID from the given MRS/MSR instruction. */
    287293#define ARMV8_AARCH64_SYSREG_ID_FROM_MRS_MSR(a_MsrMrsInsn) \
  • trunk/src/VBox/Disassembler/DisasmCore-armv8.cpp

    r105731 r105734  
    296296    /* Assumes a op0:op1:CRn:CRm:op2 encoding in the instruction starting at the given bit position. */
    297297    uint32_t u32ImmRaw = disArmV8ExtractBitVecFromInsn(u32Insn, pInsnParm->idxBitStart, pInsnParm->cBits);
    298     pParam->armv8.Reg.idSysReg = ARMV8_AARCH64_SYSREG_ID_CREATE(2 + ((u32ImmRaw >> 14) & 0x1),
    299                                                                 (u32ImmRaw >> 11) & 0x7,
    300                                                                 (u32ImmRaw >> 7) & 0xf,
    301                                                                 (u32ImmRaw >> 3) & 0xf,
    302                                                                 u32ImmRaw & 0x7);
     298    pParam->armv8.Reg.idSysReg = ARMV8_AARCH64_SYSREG_ID_CREATE_DYN(2 + ((u32ImmRaw >> 14) & 0x1),
     299                                                                    (u32ImmRaw >> 11) & 0x7,
     300                                                                    (u32ImmRaw >> 7) & 0xf,
     301                                                                    (u32ImmRaw >> 3) & 0xf,
     302                                                                    u32ImmRaw & 0x7);
    303303    pParam->armv8.cb = 0;
    304304    pParam->fUse    |= DISUSE_REG_SYSTEM;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette