VirtualBox

Changeset 105738 in vbox


Ignore:
Timestamp:
Aug 19, 2024 6:10:56 PM (6 weeks ago)
Author:
vboxsync
Message:

Disassembler/ARMv8: Build fix and add support conditionals, bugref:10388 [build fix]

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dis-armv8.h

    r105737 r105738  
    4242#include <VBox/types.h>
    4343#include <VBox/disopcode-armv8.h>
    44 #include <iprt/armv8.h>
    4544#include <iprt/assert.h>
    4645
     
    9089{
    9190    /** Condition flag for the instruction - kArmv8InstrCond_Al if not conditional instruction. */
    92     ARMV8INSTRCOND      enmCond;
     91    DISARMV8INSTRCOND   enmCond;
    9392    /** Internal: Pointer to the instruction class table. */
    9493    PCDISARMV8INSNCLASS pInsnClass;
  • trunk/include/VBox/disopcode-armv8.h

    r99323 r105738  
    521521
    522522
     523/** Armv8 Condition codes.    */
     524typedef enum DISARMV8INSTRCOND
     525{
     526    kDisArmv8InstrCond_Eq = 0,                     /**< 0 - Equal - Zero set. */
     527    kDisArmv8InstrCond_Ne,                         /**< 1 - Not equal - Zero clear. */
     528
     529    kDisArmv8InstrCond_Cs,                         /**< 2 - Carry set (also known as 'HS'). */
     530    kDisArmv8InstrCond_Hs = kDisArmv8InstrCond_Cs, /**< 2 - Unsigned higher or same. */
     531    kDisArmv8InstrCond_Cc,                         /**< 3 - Carry clear (also known as 'LO'). */
     532    kDisArmv8InstrCond_Lo = kDisArmv8InstrCond_Cc, /**< 3 - Unsigned lower. */
     533
     534    kDisArmv8InstrCond_Mi,                         /**< 4 - Negative result (minus). */
     535    kDisArmv8InstrCond_Pl,                         /**< 5 - Positive or zero result (plus). */
     536
     537    kDisArmv8InstrCond_Vs,                         /**< 6 - Overflow set. */
     538    kDisArmv8InstrCond_Vc,                         /**< 7 - Overflow clear. */
     539
     540    kDisArmv8InstrCond_Hi,                         /**< 8 - Unsigned higher. */
     541    kDisArmv8InstrCond_Ls,                         /**< 9 - Unsigned lower or same. */
     542
     543    kDisArmv8InstrCond_Ge,                         /**< a - Signed greater or equal. */
     544    kDisArmv8InstrCond_Lt,                         /**< b - Signed less than. */
     545
     546    kDisArmv8InstrCond_Gt,                         /**< c - Signed greater than. */
     547    kDisArmv8InstrCond_Le,                         /**< d - Signed less or equal. */
     548
     549    kDisArmv8InstrCond_Al,                         /**< e - Condition is always true. */
     550    kDisArmv8InstrCond_Al1                         /**< f - Condition is always true. */
     551} DISARMV8INSTRCOND;
     552
     553
    523554/** @defgroup grp_dis_opparam_armv8 Opcode parameters (DISOPCODE::fParam1,
    524555 *            DISOPCODE::fParam2, DISOPCODE::fParam3)
  • trunk/src/VBox/Disassembler/DisasmCore-armv8.cpp

    r105736 r105738  
    274274{
    275275    RT_NOREF(pInsnClass, pParam, pf64Bit);
    276     pDis->armv8.enmCond = (ARMV8INSTRCOND)disArmV8ExtractBitVecFromInsn(u32Insn, pInsnParm->idxBitStart, pInsnParm->cBits);
     276    pDis->armv8.enmCond = (DISARMV8INSTRCOND)disArmV8ExtractBitVecFromInsn(u32Insn, pInsnParm->idxBitStart, pInsnParm->cBits);
    277277    return VINF_SUCCESS;
    278278}
     
    341341    pDis->aParams[3].armv8.fParam = pOp->Opc.fParam4;
    342342    pDis->armv8.pInsnClass        = pInsnClass;
    343     pDis->armv8.enmCond           = kArmv8InstrCond_Al;
     343    pDis->armv8.enmCond           = kDisArmv8InstrCond_Al;
    344344
    345345    pDis->pCurInstr = &pOp->Opc;
  • trunk/src/VBox/Disassembler/DisasmFormatArmV8.cpp

    r105736 r105738  
    5555    "x16",   "x17",   "x18",   "x19",   "x20",   "x21",   "x22",   "x23",   "x24",   "x25",   "x26",  "x27",  "x28",  "x29",  "x30",  "xzr"
    5656};
    57 static const char g_aszArmV8Cond[16][4] =
     57static const char g_aszArmV8Cond[16][3] =
    5858{
    5959    "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "al", "al"
     
    589589
    590590        /* Add any conditionals. */
    591         if (pDis->armv8.enmCond != kArmv8InstrCond_Al)
     591        if (pDis->armv8.enmCond != kDisArmv8InstrCond_Al)
    592592        {
    593593            PUT_C('.');
     
    616616                                  ? &pDis->aParams[pInsnParam->idxParam]
    617617                                  : NULL;
    618             if (i > 0)
     618            if (   pParam
     619                && pInsnParam->idxParam > 0)
    619620                PUT_C(',');
    620621            PUT_C(' '); /** @todo Make the indenting configurable. */
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