VirtualBox

Changeset 41744 in vbox


Ignore:
Timestamp:
Jun 15, 2012 2:29:09 AM (13 years ago)
Author:
vboxsync
Message:

DISOPPARAM: s/base.reg_*/Base.idx*Reg/ + docs

Location:
trunk
Files:
11 edited

Legend:

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

    r41743 r41744  
    194194/** @name 64-bit general register indexes.
    195195 * This matches the AMD64 register encoding.  It is found used in
    196  * DISOPPARAM::base.reg_gen and DISOPPARAM::Index.idxGenReg.
     196 * DISOPPARAM::Base.idxGenReg and DISOPPARAM::Index.idxGenReg.
    197197 * @note  Safe to assume same values as the 16-bit and 32-bit general registers.
    198198 * @{
     
    218218/** @name 32-bit general register indexes.
    219219 * This matches the AMD64 register encoding.  It is found used in
    220  * DISOPPARAM::base.reg_gen and DISOPPARAM::Index.idxGenReg.
     220 * DISOPPARAM::Base.idxGenReg and DISOPPARAM::Index.idxGenReg.
    221221 * @note  Safe to assume same values as the 16-bit and 64-bit general registers.
    222222 * @{
     
    242242/** @name 16-bit general register indexes.
    243243 * This matches the AMD64 register encoding.  It is found used in
    244  * DISOPPARAM::base.reg_gen and DISOPPARAM::Index.idxGenReg.
     244 * DISOPPARAM::Base.idxGenReg and DISOPPARAM::Index.idxGenReg.
    245245 * @note  Safe to assume same values as the 32-bit and 64-bit general registers.
    246246 * @{
     
    266266/** @name 8-bit general register indexes.
    267267 * This mostly (?) matches the AMD64 register encoding.  It is found used in
    268  * DISOPPARAM::base.reg_gen and DISOPPARAM::Index.idxGenReg.
     268 * DISOPPARAM::Base.idxGenReg and DISOPPARAM::Index.idxGenReg.
    269269 * @{
    270270 */
     
    293293/** @name Segment registerindexes.
    294294 * This matches the AMD64 register encoding.  It is found used in
    295  * DISOPPARAM::base.reg_seg.
     295 * DISOPPARAM::Base.idxSegReg.
    296296 * @{
    297297 */
     
    311311/** @name FPU register indexes.
    312312 * This matches the AMD64 register encoding.  It is found used in
    313  * DISOPPARAM::base.reg_fp.
     313 * DISOPPARAM::Base.idxFpuReg.
    314314 * @{
    315315 */
     
    326326/** @name Control register indexes.
    327327 * This matches the AMD64 register encoding.  It is found used in
    328  * DISOPPARAM::base.reg_ctrl.
     328 * DISOPPARAM::Base.idxCtrlReg.
    329329 * @{
    330330 */
     
    339339/** @name Debug register indexes.
    340340 * This matches the AMD64 register encoding.  It is found used in
    341  * DISOPPARAM::base.reg_dbg.
     341 * DISOPPARAM::Base.idxDbgReg.
    342342 * @{
    343343 */
     
    354354/** @name MMX register indexes.
    355355 * This matches the AMD64 register encoding.  It is found used in
    356  * DISOPPARAM::base.reg_mmx.
     356 * DISOPPARAM::Base.idxMmxReg.
    357357 * @{
    358358 */
     
    369369/** @name SSE register indexes.
    370370 * This matches the AMD64 register encoding.  It is found used in
    371  * DISOPPARAM::base.reg_xmm.
     371 * DISOPPARAM::Base.idxXmmReg.
    372372 * @{
    373373 */
     
    380380#define DISXREG_XMM6                    UINT8_C(6)
    381381#define DISXREG_XMM7                    UINT8_C(7)
    382 /** @}  */
     382/** @} */
    383383
    384384
     
    388388typedef struct DISOPPARAM
    389389{
    390     /** Immediate value or address, if used. */
    391     uint64_t        uValue;
    392390    /** A combination of DISUSE_XXX. */
    393391    uint64_t        fUse;
     392    /** Immediate value or address, applicable if any of the flags included in
     393     * DISUSE_IMMEDIATE are set in fUse. */
     394    uint64_t        uValue;
     395    /** Disposition.  */
    394396    union
    395397    {
     398        /** 64-bit displacement, applicable if DISUSE_DISPLACEMENT64 is set in fUse.  */
    396399        int64_t     i64;
     400        uint64_t    u64;
     401        /** 32-bit displacement, applicable if DISUSE_DISPLACEMENT32 or
     402         * DISUSE_RIPDISPLACEMENT32  is set in fUse. */
    397403        int32_t     i32;
     404        uint32_t    u32;
     405        /** 16-bit displacement, applicable if DISUSE_DISPLACEMENT16 is set in fUse.  */
    398406        int32_t     i16;
     407        uint32_t    u16;
     408        /** 8-bit displacement, applicable if DISUSE_DISPLACEMENT8 is set in fUse.  */
    399409        int32_t     i8;
    400         uint64_t    u64;
    401         uint32_t    u32;
    402         uint32_t    u16;
    403410        uint32_t    u8;
    404411    } uDisp;
    405     /** Copy of the corresponding DISOPCODE::fParam1 / DISOPCODE::fParam2 /
    406      *  DISOPCODE::fParam3. */
    407     uint32_t        fParam;
    408 
     412    /** The base register from ModR/M or SIB, applicable if DISUSE_BASE is
     413     * set in fUse. */
    409414    union
    410415    {
    411         /** DISGREG_XXX. */
    412         uint8_t     reg_gen;
    413         /** DISFPREG_XXX */
    414         uint8_t     reg_fp;
    415         /** DISMREG_XXX. */
    416         uint8_t     reg_mmx;
    417         /** DISXREG_XXX. */
    418         uint8_t     reg_xmm;
    419         /** DISSELREG_XXX. */
    420         uint8_t     reg_seg;
    421         /** TR0-TR7  (no defines for these). */
    422         uint8_t     reg_test;
    423         /** DISCREG_XXX */
    424         uint8_t     reg_ctrl;
    425         /** DISDREG_XXX */
    426         uint8_t     reg_dbg;
    427     } base;
     416        /** General register index (DISGREG_XXX), applicable if DISUSE_REG_GEN8,
     417         * DISUSE_REG_GEN16, DISUSE_REG_GEN32 or DISUSE_REG_GEN64 is set in fUse. */
     418        uint8_t     idxGenReg;
     419        /** FPU stack register index (DISFPREG_XXX), applicable if DISUSE_REG_FP is
     420         * set in fUse.  1:1 indexes. */
     421        uint8_t     idxFpuReg;
     422        /** MMX register index (DISMREG_XXX), applicable if DISUSE_REG_MMX is
     423         * set in fUse.  1:1 indexes. */
     424        uint8_t     idxMmxReg;
     425        /** SSE register index (DISXREG_XXX), applicable if DISUSE_REG_XMM is
     426         * set in fUse.  1:1 indexes. */
     427        uint8_t     idxXmmReg;
     428        /** Segment register index (DISSELREG_XXX), applicable if DISUSE_REG_SEG is
     429         * set in fUse. */
     430        uint8_t     idxSegReg;
     431        /** Test register, TR0-TR7, present on early IA32 CPUs, applicable if
     432         * DISUSE_REG_TEST is set in fUse.  No index defines for these. */
     433        uint8_t     idxTestReg;
     434        /** Control register index (DISCREG_XXX), applicable if DISUSE_REG_CR is
     435         * set in fUse.  1:1 indexes. */
     436        uint8_t     idxCtrlReg;
     437        /** Debug register index (DISDREG_XXX), applicable if DISUSE_REG_DBG is
     438         * set in fUse.  1:1 indexes. */
     439        uint8_t     idxDbgReg;
     440    } Base;
    428441    /** The SIB index register meaning, applicable if DISUSE_INDEX is
    429442     * set in fUse. */
     
    438451    /** Parameter size. */
    439452    uint8_t         cb;
     453    /** Copy of the corresponding DISOPCODE::fParam1 / DISOPCODE::fParam2 /
     454     * DISOPCODE::fParam3. */
     455    uint32_t        fParam;
    440456} DISOPPARAM;
    441457AssertCompileSize(DISOPPARAM, 32);
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r41743 r41744  
    643643    {
    644644        pParam->fUse |= DISUSE_BASE | regtype;
    645         pParam->base.reg_gen = base;
     645        pParam->Base.idxGenReg = base;
    646646    }
    647647    return;   /* Already fetched everything in ParseSIB; no size returned */
     
    742742                {
    743743                    pCpu->fPrefix &= ~DISPREFIX_LOCK;
    744                     pParam->base.reg_ctrl = DISCREG_CR8;
     744                    pParam->Base.idxCtrlReg = DISCREG_CR8;
    745745                }
    746746                else
    747                     pParam->base.reg_ctrl = reg;
     747                    pParam->Base.idxCtrlReg = reg;
    748748                return 0;
    749749
    750750            case OP_PARM_D: //debug register
    751751                pParam->fUse |= DISUSE_REG_DBG;
    752                 pParam->base.reg_dbg = reg;
     752                pParam->Base.idxDbgReg = reg;
    753753                return 0;
    754754
     
    756756                reg &= 7;   /* REX.R has no effect here */
    757757                pParam->fUse |= DISUSE_REG_MMX;
    758                 pParam->base.reg_mmx = reg;
     758                pParam->Base.idxMmxReg = reg;
    759759                return 0;
    760760
     
    768768                reg &= 7;   /* REX.R has no effect here */
    769769                pParam->fUse |= DISUSE_REG_TEST;
    770                 pParam->base.reg_test = reg;
     770                pParam->Base.idxTestReg = reg;
    771771                return 0;
    772772
     
    779779            case OP_PARM_V: //XMM register
    780780                pParam->fUse |= DISUSE_REG_XMM;
    781                 pParam->base.reg_xmm = reg;
     781                pParam->Base.idxXmmReg = reg;
    782782                return 0;
    783783            }
     
    15591559        {
    15601560            /* Use 32-bit registers. */
    1561             pParam->base.reg_gen = pParam->fParam - OP_PARM_REG_GEN32_START;
     1561            pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START;
    15621562            pParam->fUse  |= DISUSE_REG_GEN32;
    15631563            pParam->cb     = 4;
     
    15671567        {
    15681568            /* Use 64-bit registers. */
    1569             pParam->base.reg_gen = pParam->fParam - OP_PARM_REG_GEN32_START;
     1569            pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START;
    15701570            if (    (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG)
    15711571                &&  pParam == &pCpu->Param1             /* ugly assumption that it only applies to the first parameter */
    15721572                &&  (pCpu->fPrefix & DISPREFIX_REX)
    15731573                &&  (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS))
    1574                 pParam->base.reg_gen += 8;
     1574                pParam->Base.idxGenReg += 8;
    15751575
    15761576            pParam->fUse  |= DISUSE_REG_GEN64;
     
    15801580        {
    15811581            /* Use 16-bit registers. */
    1582             pParam->base.reg_gen = pParam->fParam - OP_PARM_REG_GEN32_START;
     1582            pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START;
    15831583            pParam->fUse  |= DISUSE_REG_GEN16;
    15841584            pParam->cb     = 2;
     
    15901590    {
    15911591        /* Segment ES..GS registers. */
    1592         pParam->base.reg_seg = (DISSELREG)(pParam->fParam - OP_PARM_REG_SEG_START);
     1592        pParam->Base.idxSegReg = (DISSELREG)(pParam->fParam - OP_PARM_REG_SEG_START);
    15931593        pParam->fUse  |= DISUSE_REG_SEG;
    15941594        pParam->cb     = 2;
     
    15981598    {
    15991599        /* 16-bit AX..DI registers. */
    1600         pParam->base.reg_gen = pParam->fParam - OP_PARM_REG_GEN16_START;
     1600        pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN16_START;
    16011601        pParam->fUse  |= DISUSE_REG_GEN16;
    16021602        pParam->cb     = 2;
     
    16061606    {
    16071607        /* 8-bit AL..DL, AH..DH registers. */
    1608         pParam->base.reg_gen = pParam->fParam - OP_PARM_REG_GEN8_START;
     1608        pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN8_START;
    16091609        pParam->fUse  |= DISUSE_REG_GEN8;
    16101610        pParam->cb     = 1;
     
    16161616                &&  (pCpu->fPrefix & DISPREFIX_REX)
    16171617                &&  (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS))
    1618                 pParam->base.reg_gen += 8;              /* least significant byte of R8-R15 */
     1618                pParam->Base.idxGenReg += 8;              /* least significant byte of R8-R15 */
    16191619        }
    16201620    }
     
    16231623    {
    16241624        /* FPU registers. */
    1625         pParam->base.reg_fp = pParam->fParam - OP_PARM_REG_FP_START;
     1625        pParam->Base.idxFpuReg = pParam->fParam - OP_PARM_REG_FP_START;
    16261626        pParam->fUse  |= DISUSE_REG_FP;
    16271627        pParam->cb     = 10;
     
    16421642    if (pCpu->uAddrMode == DISCPUMODE_32BIT)
    16431643    {
    1644         pParam->base.reg_gen = DISGREG_ESI;
     1644        pParam->Base.idxGenReg = DISGREG_ESI;
    16451645        pParam->fUse |= DISUSE_REG_GEN32;
    16461646    }
     
    16481648    if (pCpu->uAddrMode == DISCPUMODE_64BIT)
    16491649    {
    1650         pParam->base.reg_gen = DISGREG_RSI;
     1650        pParam->Base.idxGenReg = DISGREG_RSI;
    16511651        pParam->fUse |= DISUSE_REG_GEN64;
    16521652    }
    16531653    else
    16541654    {
    1655         pParam->base.reg_gen = DISGREG_SI;
     1655        pParam->Base.idxGenReg = DISGREG_SI;
    16561656        pParam->fUse |= DISUSE_REG_GEN16;
    16571657    }
     
    16671667    if (pCpu->uAddrMode == DISCPUMODE_32BIT)
    16681668    {
    1669         pParam->base.reg_gen = DISGREG_ESI;
     1669        pParam->Base.idxGenReg = DISGREG_ESI;
    16701670        pParam->fUse |= DISUSE_REG_GEN32;
    16711671    }
     
    16731673    if (pCpu->uAddrMode == DISCPUMODE_64BIT)
    16741674    {
    1675         pParam->base.reg_gen = DISGREG_RSI;
     1675        pParam->Base.idxGenReg = DISGREG_RSI;
    16761676        pParam->fUse |= DISUSE_REG_GEN64;
    16771677    }
    16781678    else
    16791679    {
    1680         pParam->base.reg_gen = DISGREG_SI;
     1680        pParam->Base.idxGenReg = DISGREG_SI;
    16811681        pParam->fUse |= DISUSE_REG_GEN16;
    16821682    }
     
    16921692    if (pCpu->uAddrMode == DISCPUMODE_32BIT)
    16931693    {
    1694         pParam->base.reg_gen = DISGREG_EDI;
     1694        pParam->Base.idxGenReg = DISGREG_EDI;
    16951695        pParam->fUse |= DISUSE_REG_GEN32;
    16961696    }
     
    16981698    if (pCpu->uAddrMode == DISCPUMODE_64BIT)
    16991699    {
    1700         pParam->base.reg_gen = DISGREG_RDI;
     1700        pParam->Base.idxGenReg = DISGREG_RDI;
    17011701        pParam->fUse |= DISUSE_REG_GEN64;
    17021702    }
    17031703    else
    17041704    {
    1705         pParam->base.reg_gen = DISGREG_DI;
     1705        pParam->Base.idxGenReg = DISGREG_DI;
    17061706        pParam->fUse |= DISUSE_REG_GEN16;
    17071707    }
     
    17171717    if (pCpu->uAddrMode == DISCPUMODE_32BIT)
    17181718    {
    1719         pParam->base.reg_gen = DISGREG_EDI;
     1719        pParam->Base.idxGenReg = DISGREG_EDI;
    17201720        pParam->fUse |= DISUSE_REG_GEN32;
    17211721    }
     
    17231723    if (pCpu->uAddrMode == DISCPUMODE_64BIT)
    17241724    {
    1725         pParam->base.reg_gen = DISGREG_RDI;
     1725        pParam->Base.idxGenReg = DISGREG_RDI;
    17261726        pParam->fUse |= DISUSE_REG_GEN64;
    17271727    }
    17281728    else
    17291729    {
    1730         pParam->base.reg_gen = DISGREG_DI;
     1730        pParam->Base.idxGenReg = DISGREG_DI;
    17311731        pParam->fUse |= DISUSE_REG_GEN16;
    17321732    }
     
    23412341
    23422342        pParam->fUse |= DISUSE_REG_GEN8;
    2343         pParam->base.reg_gen = idx;
     2343        pParam->Base.idxGenReg = idx;
    23442344        break;
    23452345
     
    23482348
    23492349        pParam->fUse |= DISUSE_REG_GEN16;
    2350         pParam->base.reg_gen = idx;
     2350        pParam->Base.idxGenReg = idx;
    23512351        break;
    23522352
     
    23552355
    23562356        pParam->fUse |= DISUSE_REG_GEN32;
    2357         pParam->base.reg_gen = idx;
     2357        pParam->Base.idxGenReg = idx;
    23582358        break;
    23592359
    23602360    case OP_PARM_q:
    23612361        pParam->fUse |= DISUSE_REG_GEN64;
    2362         pParam->base.reg_gen = idx;
     2362        pParam->Base.idxGenReg = idx;
    23632363        break;
    23642364
     
    23752375    NOREF(pCpu); NOREF(pOp);
    23762376    pParam->fUse |= DISUSE_REG_GEN16;
    2377     pParam->base.reg_gen = BaseModRMReg16[idx];
     2377    pParam->Base.idxGenReg = BaseModRMReg16[idx];
    23782378    if (idx < 4)
    23792379    {
     
    23952395
    23962396    pParam->fUse |= DISUSE_REG_SEG;
    2397     pParam->base.reg_seg = (DISSELREG)idx;
     2397    pParam->Base.idxSegReg = (DISSELREG)idx;
    23982398}
    23992399
  • trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp

    r41743 r41744  
    100100        case DISUSE_REG_GEN8:
    101101        {
    102             Assert(pParam->base.reg_gen < RT_ELEMENTS(g_aszYasmRegGen8));
    103             const char *psz = g_aszYasmRegGen8[pParam->base.reg_gen];
     102            Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen8));
     103            const char *psz = g_aszYasmRegGen8[pParam->Base.idxGenReg];
    104104            *pcchReg = 2 + !!psz[2] + !!psz[3];
    105105            return psz;
     
    108108        case DISUSE_REG_GEN16:
    109109        {
    110             Assert(pParam->base.reg_gen < RT_ELEMENTS(g_aszYasmRegGen16));
    111             const char *psz = g_aszYasmRegGen16[pParam->base.reg_gen];
     110            Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen16));
     111            const char *psz = g_aszYasmRegGen16[pParam->Base.idxGenReg];
    112112            *pcchReg = 2 + !!psz[2] + !!psz[3];
    113113            return psz;
     
    116116        case DISUSE_REG_GEN32:
    117117        {
    118             Assert(pParam->base.reg_gen < RT_ELEMENTS(g_aszYasmRegGen32));
    119             const char *psz = g_aszYasmRegGen32[pParam->base.reg_gen];
     118            Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen32));
     119            const char *psz = g_aszYasmRegGen32[pParam->Base.idxGenReg];
    120120            *pcchReg = 2 + !!psz[2] + !!psz[3];
    121121            return psz;
     
    124124        case DISUSE_REG_GEN64:
    125125        {
    126             Assert(pParam->base.reg_gen < RT_ELEMENTS(g_aszYasmRegGen64));
    127             const char *psz = g_aszYasmRegGen64[pParam->base.reg_gen];
     126            Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen64));
     127            const char *psz = g_aszYasmRegGen64[pParam->Base.idxGenReg];
    128128            *pcchReg = 2 + !!psz[2] + !!psz[3];
    129129            return psz;
     
    132132        case DISUSE_REG_FP:
    133133        {
    134             Assert(pParam->base.reg_fp < RT_ELEMENTS(g_aszYasmRegFP));
    135             const char *psz = g_aszYasmRegFP[pParam->base.reg_fp];
     134            Assert(pParam->Base.idxFpuReg < RT_ELEMENTS(g_aszYasmRegFP));
     135            const char *psz = g_aszYasmRegFP[pParam->Base.idxFpuReg];
    136136            *pcchReg = 3;
    137137            return psz;
     
    140140        case DISUSE_REG_MMX:
    141141        {
    142             Assert(pParam->base.reg_mmx < RT_ELEMENTS(g_aszYasmRegMMX));
    143             const char *psz = g_aszYasmRegMMX[pParam->base.reg_mmx];
     142            Assert(pParam->Base.idxMmxReg < RT_ELEMENTS(g_aszYasmRegMMX));
     143            const char *psz = g_aszYasmRegMMX[pParam->Base.idxMmxReg];
    144144            *pcchReg = 3;
    145145            return psz;
     
    148148        case DISUSE_REG_XMM:
    149149        {
    150             Assert(pParam->base.reg_xmm < RT_ELEMENTS(g_aszYasmRegXMM));
    151             const char *psz = g_aszYasmRegXMM[pParam->base.reg_mmx];
     150            Assert(pParam->Base.idxXmmReg < RT_ELEMENTS(g_aszYasmRegXMM));
     151            const char *psz = g_aszYasmRegXMM[pParam->Base.idxMmxReg];
    152152            *pcchReg = 4 + !!psz[4];
    153153            return psz;
     
    156156        case DISUSE_REG_CR:
    157157        {
    158             Assert(pParam->base.reg_ctrl < RT_ELEMENTS(g_aszYasmRegCRx));
    159             const char *psz = g_aszYasmRegCRx[pParam->base.reg_ctrl];
     158            Assert(pParam->Base.idxCtrlReg < RT_ELEMENTS(g_aszYasmRegCRx));
     159            const char *psz = g_aszYasmRegCRx[pParam->Base.idxCtrlReg];
    160160            *pcchReg = 3;
    161161            return psz;
     
    164164        case DISUSE_REG_DBG:
    165165        {
    166             Assert(pParam->base.reg_dbg < RT_ELEMENTS(g_aszYasmRegDRx));
    167             const char *psz = g_aszYasmRegDRx[pParam->base.reg_dbg];
     166            Assert(pParam->Base.idxDbgReg < RT_ELEMENTS(g_aszYasmRegDRx));
     167            const char *psz = g_aszYasmRegDRx[pParam->Base.idxDbgReg];
    168168            *pcchReg = 3;
    169169            return psz;
     
    172172        case DISUSE_REG_SEG:
    173173        {
    174             Assert(pParam->base.reg_seg < RT_ELEMENTS(g_aszYasmRegCRx));
    175             const char *psz = g_aszYasmRegSeg[pParam->base.reg_seg];
     174            Assert(pParam->Base.idxSegReg < RT_ELEMENTS(g_aszYasmRegCRx));
     175            const char *psz = g_aszYasmRegSeg[pParam->Base.idxSegReg];
    176176            *pcchReg = 2;
    177177            return psz;
     
    180180        case DISUSE_REG_TEST:
    181181        {
    182             Assert(pParam->base.reg_test < RT_ELEMENTS(g_aszYasmRegTRx));
    183             const char *psz = g_aszYasmRegTRx[pParam->base.reg_test];
     182            Assert(pParam->Base.idxTestReg < RT_ELEMENTS(g_aszYasmRegTRx));
     183            const char *psz = g_aszYasmRegTRx[pParam->Base.idxTestReg];
    184184            *pcchReg = 3;
    185185            return psz;
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r41743 r41744  
    270270        AssertCompile(DISGREG_ESP == DISGREG_SP);
    271271        AssertCompile(DISGREG_EBP == DISGREG_BP);
    272         if (pParam->base.reg_gen == DISGREG_ESP || pParam->base.reg_gen == DISGREG_EBP)
     272        if (pParam->Base.idxGenReg == DISGREG_ESP || pParam->Base.idxGenReg == DISGREG_EBP)
    273273            return DISSELREG_SS;
    274274    }
     
    515515            {
    516516                pParamVal->flags |= DISQPV_FLAG_8;
    517                 if (RT_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     517                if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    518518            }
    519519            else
     
    521521            {
    522522                pParamVal->flags |= DISQPV_FLAG_16;
    523                 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     523                if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    524524            }
    525525            else
     
    527527            {
    528528                pParamVal->flags |= DISQPV_FLAG_32;
    529                 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     529                if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    530530            }
    531531            else
     
    533533            {
    534534                pParamVal->flags |= DISQPV_FLAG_64;
    535                 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     535                if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    536536            }
    537537            else
     
    647647            pParamVal->flags |= DISQPV_FLAG_8;
    648648            pParamVal->size   = sizeof(uint8_t);
    649             if (RT_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     649            if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    650650        }
    651651        else
     
    654654            pParamVal->flags |= DISQPV_FLAG_16;
    655655            pParamVal->size   = sizeof(uint16_t);
    656             if (RT_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     656            if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    657657        }
    658658        else
     
    661661            pParamVal->flags |= DISQPV_FLAG_32;
    662662            pParamVal->size   = sizeof(uint32_t);
    663             if (RT_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     663            if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    664664        }
    665665        else
     
    668668            pParamVal->flags |= DISQPV_FLAG_64;
    669669            pParamVal->size   = sizeof(uint64_t);
    670             if (RT_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     670            if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    671671        }
    672672        else
     
    767767        {
    768768            uint8_t *pu8Reg;
    769             if (RT_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen, &pu8Reg)))
     769            if (RT_SUCCESS(DISPtrReg8(pCtx, pParam->Base.idxGenReg, &pu8Reg)))
    770770            {
    771771                *pcbSize = sizeof(uint8_t);
     
    778778        {
    779779            uint16_t *pu16Reg;
    780             if (RT_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen, &pu16Reg)))
     780            if (RT_SUCCESS(DISPtrReg16(pCtx, pParam->Base.idxGenReg, &pu16Reg)))
    781781            {
    782782                *pcbSize = sizeof(uint16_t);
     
    789789        {
    790790            uint32_t *pu32Reg;
    791             if (RT_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen, &pu32Reg)))
     791            if (RT_SUCCESS(DISPtrReg32(pCtx, pParam->Base.idxGenReg, &pu32Reg)))
    792792            {
    793793                *pcbSize = sizeof(uint32_t);
     
    800800        {
    801801            uint64_t *pu64Reg;
    802             if (RT_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen, &pu64Reg)))
     802            if (RT_SUCCESS(DISPtrReg64(pCtx, pParam->Base.idxGenReg, &pu64Reg)))
    803803            {
    804804                *pcbSize = sizeof(uint64_t);
  • trunk/src/VBox/VMM/VMMAll/EMAll.cpp

    r41739 r41744  
    879879                {
    880880                case 1: //special case for AH etc
    881                         rc = DISWriteReg8(pRegFrame, pDis->Param1.base.reg_gen,  (uint8_t )valpar2); break;
    882                 case 2: rc = DISWriteReg16(pRegFrame, pDis->Param1.base.reg_gen, (uint16_t)valpar2); break;
    883                 case 4: rc = DISWriteReg32(pRegFrame, pDis->Param1.base.reg_gen, (uint32_t)valpar2); break;
    884                 case 8: rc = DISWriteReg64(pRegFrame, pDis->Param1.base.reg_gen, valpar2); break;
     881                        rc = DISWriteReg8(pRegFrame, pDis->Param1.Base.idxGenReg,  (uint8_t )valpar2); break;
     882                case 2: rc = DISWriteReg16(pRegFrame, pDis->Param1.Base.idxGenReg, (uint16_t)valpar2); break;
     883                case 4: rc = DISWriteReg32(pRegFrame, pDis->Param1.Base.idxGenReg, (uint32_t)valpar2); break;
     884                case 8: rc = DISWriteReg64(pRegFrame, pDis->Param1.Base.idxGenReg, valpar2); break;
    885885                default: AssertFailedReturn(VERR_EM_INTERPRETER);
    886886                }
     
    905905                {
    906906                case 1: //special case for AH etc
    907                         rc = DISWriteReg8(pRegFrame, pDis->Param2.base.reg_gen,  (uint8_t )valpar1);    break;
    908                 case 2: rc = DISWriteReg16(pRegFrame, pDis->Param2.base.reg_gen, (uint16_t)valpar1);    break;
    909                 case 4: rc = DISWriteReg32(pRegFrame, pDis->Param2.base.reg_gen, (uint32_t)valpar1);    break;
    910                 case 8: rc = DISWriteReg64(pRegFrame, pDis->Param2.base.reg_gen, valpar1);              break;
     907                        rc = DISWriteReg8(pRegFrame, pDis->Param2.Base.idxGenReg,  (uint8_t )valpar1);    break;
     908                case 2: rc = DISWriteReg16(pRegFrame, pDis->Param2.Base.idxGenReg, (uint16_t)valpar1);    break;
     909                case 4: rc = DISWriteReg32(pRegFrame, pDis->Param2.Base.idxGenReg, (uint32_t)valpar1);    break;
     910                case 8: rc = DISWriteReg64(pRegFrame, pDis->Param2.Base.idxGenReg, valpar1);              break;
    911911                default: AssertFailedReturn(VERR_EM_INTERPRETER);
    912912                }
     
    10511051                if (    (pDis->Param1.fUse & DISUSE_BASE)
    10521052                    &&  (pDis->Param1.fUse & (DISUSE_REG_GEN16|DISUSE_REG_GEN32))
    1053                     &&  pDis->Param1.base.reg_gen == DISGREG_ESP
     1053                    &&  pDis->Param1.Base.idxGenReg == DISGREG_ESP
    10541054                   )
    10551055                   pParam1 = (RTGCPTR)((RTGCUINTPTR)pParam1 + param1.size);
     
    16091609                switch(param1.size)
    16101610                {
    1611                 case 1: rc = DISWriteReg8(pRegFrame, pDis->Param1.base.reg_gen,  (uint8_t) val64); break;
    1612                 case 2: rc = DISWriteReg16(pRegFrame, pDis->Param1.base.reg_gen, (uint16_t)val64); break;
    1613                 case 4: rc = DISWriteReg32(pRegFrame, pDis->Param1.base.reg_gen, (uint32_t)val64); break;
    1614                 case 8: rc = DISWriteReg64(pRegFrame, pDis->Param1.base.reg_gen, val64); break;
     1611                case 1: rc = DISWriteReg8(pRegFrame, pDis->Param1.Base.idxGenReg,  (uint8_t) val64); break;
     1612                case 2: rc = DISWriteReg16(pRegFrame, pDis->Param1.Base.idxGenReg, (uint16_t)val64); break;
     1613                case 4: rc = DISWriteReg32(pRegFrame, pDis->Param1.Base.idxGenReg, (uint32_t)val64); break;
     1614                case 8: rc = DISWriteReg64(pRegFrame, pDis->Param1.Base.idxGenReg, val64); break;
    16151615                default:
    16161616                    return VERR_EM_INTERPRETER;
     
    24282428        if(param1.size != sizeof(uint16_t))
    24292429            return VERR_EM_INTERPRETER;
    2430         LogFlow(("emInterpretSmsw %d <- cr0 (%x)\n", pDis->Param1.base.reg_gen, cr0));
    2431         rc = DISWriteReg16(pRegFrame, pDis->Param1.base.reg_gen, cr0);
     2430        LogFlow(("emInterpretSmsw %d <- cr0 (%x)\n", pDis->Param1.Base.idxGenReg, cr0));
     2431        rc = DISWriteReg16(pRegFrame, pDis->Param1.Base.idxGenReg, cr0);
    24322432        break;
    24332433
     
    24692469    NOREF(pvFault); NOREF(pcbSize);
    24702470    if ((pDis->Param1.fUse == DISUSE_REG_GEN32 || pDis->Param1.fUse == DISUSE_REG_GEN64) && pDis->Param2.fUse == DISUSE_REG_CR)
    2471         return EMInterpretCRxRead(pVM, pVCpu, pRegFrame, pDis->Param1.base.reg_gen, pDis->Param2.base.reg_ctrl);
     2471        return EMInterpretCRxRead(pVM, pVCpu, pRegFrame, pDis->Param1.Base.idxGenReg, pDis->Param2.Base.idxCtrlReg);
    24722472
    24732473    if (pDis->Param1.fUse == DISUSE_REG_CR && (pDis->Param2.fUse == DISUSE_REG_GEN32 || pDis->Param2.fUse == DISUSE_REG_GEN64))
    2474         return EMInterpretCRxWrite(pVM, pVCpu, pRegFrame, pDis->Param1.base.reg_ctrl, pDis->Param2.base.reg_gen);
     2474        return EMInterpretCRxWrite(pVM, pVCpu, pRegFrame, pDis->Param1.Base.idxCtrlReg, pDis->Param2.Base.idxGenReg);
    24752475
    24762476    AssertMsgFailedReturn(("Unexpected control register move\n"), VERR_EM_INTERPRETER);
     
    25602560    if((pDis->Param1.fUse == DISUSE_REG_GEN32 || pDis->Param1.fUse == DISUSE_REG_GEN64) && pDis->Param2.fUse == DISUSE_REG_DBG)
    25612561    {
    2562         rc = EMInterpretDRxRead(pVM, pVCpu, pRegFrame, pDis->Param1.base.reg_gen, pDis->Param2.base.reg_dbg);
     2562        rc = EMInterpretDRxRead(pVM, pVCpu, pRegFrame, pDis->Param1.Base.idxGenReg, pDis->Param2.Base.idxDbgReg);
    25632563    }
    25642564    else
    25652565    if(pDis->Param1.fUse == DISUSE_REG_DBG && (pDis->Param2.fUse == DISUSE_REG_GEN32 || pDis->Param2.fUse == DISUSE_REG_GEN64))
    25662566    {
    2567         rc = EMInterpretDRxWrite(pVM, pVCpu, pRegFrame, pDis->Param1.base.reg_dbg, pDis->Param2.base.reg_gen);
     2567        rc = EMInterpretDRxWrite(pVM, pVCpu, pRegFrame, pDis->Param1.Base.idxDbgReg, pDis->Param2.Base.idxGenReg);
    25682568    }
    25692569    else
  • trunk/src/VBox/VMM/VMMAll/IOMAll.cpp

    r41741 r41744  
    8181        {
    8282            *pcbSize  = 4;
    83             DISFetchReg32(pRegFrame, pParam->base.reg_gen, (uint32_t *)pu64Data);
     83            DISFetchReg32(pRegFrame, pParam->Base.idxGenReg, (uint32_t *)pu64Data);
    8484            return true;
    8585        }
     
    8888        {
    8989            *pcbSize  = 2;
    90             DISFetchReg16(pRegFrame, pParam->base.reg_gen, (uint16_t *)pu64Data);
     90            DISFetchReg16(pRegFrame, pParam->Base.idxGenReg, (uint16_t *)pu64Data);
    9191            return true;
    9292        }
     
    9595        {
    9696            *pcbSize  = 1;
    97             DISFetchReg8(pRegFrame, pParam->base.reg_gen, (uint8_t *)pu64Data);
     97            DISFetchReg8(pRegFrame, pParam->Base.idxGenReg, (uint8_t *)pu64Data);
    9898            return true;
    9999        }
     
    101101        Assert(pParam->fUse & DISUSE_REG_GEN64);
    102102        *pcbSize  = 8;
    103         DISFetchReg64(pRegFrame, pParam->base.reg_gen, pu64Data);
     103        DISFetchReg64(pRegFrame, pParam->Base.idxGenReg, pu64Data);
    104104        return true;
    105105    }
     
    137137        {
    138138            *pcbSize  = 2;
    139             DISFetchRegSeg(pRegFrame, (DISSELREG)pParam->base.reg_seg, (RTSEL *)pu64Data);
     139            DISFetchRegSeg(pRegFrame, (DISSELREG)pParam->Base.idxSegReg, (RTSEL *)pu64Data);
    140140            return true;
    141141        } /* Else - error. */
     
    169169    if (pParam->fUse & DISUSE_REG_GEN32)
    170170    {
    171         DISWriteReg32(pRegFrame, pParam->base.reg_gen, (uint32_t)u64Data);
     171        DISWriteReg32(pRegFrame, pParam->Base.idxGenReg, (uint32_t)u64Data);
    172172        return true;
    173173    }
     
    175175    if (pParam->fUse & DISUSE_REG_GEN64)
    176176    {
    177         DISWriteReg64(pRegFrame, pParam->base.reg_gen, u64Data);
     177        DISWriteReg64(pRegFrame, pParam->Base.idxGenReg, u64Data);
    178178        return true;
    179179    }
     
    181181    if (pParam->fUse & DISUSE_REG_GEN16)
    182182    {
    183         DISWriteReg16(pRegFrame, pParam->base.reg_gen, (uint16_t)u64Data);
     183        DISWriteReg16(pRegFrame, pParam->Base.idxGenReg, (uint16_t)u64Data);
    184184        return true;
    185185    }
     
    187187    if (pParam->fUse & DISUSE_REG_GEN8)
    188188    {
    189         DISWriteReg8(pRegFrame, pParam->base.reg_gen, (uint8_t)u64Data);
     189        DISWriteReg8(pRegFrame, pParam->Base.idxGenReg, (uint8_t)u64Data);
    190190        return true;
    191191    }
     
    193193    if (pParam->fUse & DISUSE_REG_SEG)
    194194    {
    195         DISWriteRegSeg(pRegFrame, (DISSELREG)pParam->base.reg_seg, (RTSEL)u64Data);
     195        DISWriteRegSeg(pRegFrame, (DISSELREG)pParam->Base.idxSegReg, (RTSEL)u64Data);
    196196        return true;
    197197    }
  • trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp

    r41739 r41744  
    761761#endif
    762762
    763     LogFlow(("Reused instr %RGv %d at %RGv param1.fUse=%llx param1.reg=%d\n", pRegFrame->rip, pDis->pCurInstr->uOpcode, pvFault, pDis->Param1.fUse,  pDis->Param1.base.reg_gen));
     763    LogFlow(("Reused instr %RGv %d at %RGv param1.fUse=%llx param1.reg=%d\n", pRegFrame->rip, pDis->pCurInstr->uOpcode, pvFault, pDis->Param1.fUse,  pDis->Param1.Base.idxGenReg));
    764764
    765765    /* Non-supervisor mode write means it's used for something else. */
     
    806806    if (    (    (pDis->Param1.fUse & DISUSE_REG_GEN32)
    807807             ||  (pDis->Param1.fUse & DISUSE_REG_GEN64))
    808         &&  (pDis->Param1.base.reg_gen == DISGREG_ESP))
     808        &&  (pDis->Param1.Base.idxGenReg == DISGREG_ESP))
    809809    {
    810810        Log4(("pgmPoolMonitorIsReused: ESP\n"));
  • trunk/src/VBox/VMM/VMMR3/EMRaw.cpp

    r41739 r41744  
    994994                    //read
    995995                    Assert(Cpu.Param2.fUse & DISUSE_REG_CR);
    996                     Assert(Cpu.Param2.base.reg_ctrl <= DISCREG_CR4);
    997                     STAM_COUNTER_INC(&pStats->StatMovReadCR[Cpu.Param2.base.reg_ctrl]);
     996                    Assert(Cpu.Param2.Base.idxCtrlReg <= DISCREG_CR4);
     997                    STAM_COUNTER_INC(&pStats->StatMovReadCR[Cpu.Param2.Base.idxCtrlReg]);
    998998                }
    999999                else
     
    10011001                    //write
    10021002                    Assert(Cpu.Param1.fUse & DISUSE_REG_CR);
    1003                     Assert(Cpu.Param1.base.reg_ctrl <= DISCREG_CR4);
    1004                     STAM_COUNTER_INC(&pStats->StatMovWriteCR[Cpu.Param1.base.reg_ctrl]);
     1003                    Assert(Cpu.Param1.Base.idxCtrlReg <= DISCREG_CR4);
     1004                    STAM_COUNTER_INC(&pStats->StatMovWriteCR[Cpu.Param1.Base.idxCtrlReg]);
    10051005                }
    10061006                break;
  • trunk/src/VBox/VMM/VMMR3/HWACCM.cpp

    r41741 r41744  
    18391839            {
    18401840                pPatch->enmType     = HWACCMTPRINSTR_WRITE_REG;
    1841                 pPatch->uSrcOperand = pDis->Param2.base.reg_gen;
     1841                pPatch->uSrcOperand = pDis->Param2.Base.idxGenReg;
    18421842            }
    18431843            else
     
    18571857            RTGCPTR  oldrip   = pCtx->rip;
    18581858            uint32_t oldcbOp  = cbOp;
    1859             uint32_t uMmioReg = pDis->Param1.base.reg_gen;
     1859            uint32_t uMmioReg = pDis->Param1.Base.idxGenReg;
    18601860
    18611861            /* read */
     
    18731873                &&  pDis->pCurInstr->uOpcode == OP_SHR
    18741874                &&  pDis->Param1.fUse == DISUSE_REG_GEN32
    1875                 &&  pDis->Param1.base.reg_gen == uMmioReg
     1875                &&  pDis->Param1.Base.idxGenReg == uMmioReg
    18761876                &&  pDis->Param2.fUse == DISUSE_IMMEDIATE8
    18771877                &&  pDis->Param2.uValue == 4
     
    18901890                szInstr[1] = 0x0F;
    18911891                szInstr[2] = 0x20;
    1892                 szInstr[3] = 0xC0 | pDis->Param1.base.reg_gen;
     1892                szInstr[3] = 0xC0 | pDis->Param1.Base.idxGenReg;
    18931893                for (unsigned i = 4; i < pPatch->cbOp; i++)
    18941894                    szInstr[i] = 0x90;  /* nop */
     
    19061906            {
    19071907                pPatch->enmType     = HWACCMTPRINSTR_READ;
    1908                 pPatch->uDstOperand = pDis->Param1.base.reg_gen;
     1908                pPatch->uDstOperand = pDis->Param1.Base.idxGenReg;
    19091909
    19101910                rc = PGMPhysSimpleWriteGCPtr(pVCpu, pCtx->rip, aVMMCall, sizeof(aVMMCall));
     
    20282028                *
    20292029                */
    2030             bool fUsesEax = (pDis->Param2.fUse == DISUSE_REG_GEN32 && pDis->Param2.base.reg_gen == DISGREG_EAX);
     2030            bool fUsesEax = (pDis->Param2.fUse == DISUSE_REG_GEN32 && pDis->Param2.Base.idxGenReg == DISGREG_EAX);
    20312031
    20322032            aPatch[off++] = 0x51;    /* push ecx */
     
    20412041                {
    20422042                    aPatch[off++] = 0x89;    /* mov eax, src_reg */
    2043                     aPatch[off++] = MAKE_MODRM(3, pDis->Param2.base.reg_gen, DISGREG_EAX);
     2043                    aPatch[off++] = MAKE_MODRM(3, pDis->Param2.Base.idxGenReg, DISGREG_EAX);
    20442044                }
    20452045            }
     
    20812081            Assert(pDis->Param1.fUse == DISUSE_REG_GEN32);
    20822082
    2083             if (pDis->Param1.base.reg_gen != DISGREG_ECX)
     2083            if (pDis->Param1.Base.idxGenReg != DISGREG_ECX)
    20842084                aPatch[off++] = 0x51;    /* push ecx */
    2085             if (pDis->Param1.base.reg_gen != DISGREG_EDX )
     2085            if (pDis->Param1.Base.idxGenReg != DISGREG_EDX )
    20862086                aPatch[off++] = 0x52;    /* push edx */
    2087             if (pDis->Param1.base.reg_gen != DISGREG_EAX)
     2087            if (pDis->Param1.Base.idxGenReg != DISGREG_EAX)
    20882088                aPatch[off++] = 0x50;    /* push eax */
    20892089
     
    20982098            aPatch[off++] = 0x32;
    20992099
    2100             if (pDis->Param1.base.reg_gen != DISGREG_EAX)
     2100            if (pDis->Param1.Base.idxGenReg != DISGREG_EAX)
    21012101            {
    21022102                aPatch[off++] = 0x89;    /* mov dst_reg, eax */
    2103                 aPatch[off++] = MAKE_MODRM(3, DISGREG_EAX, pDis->Param1.base.reg_gen);
     2103                aPatch[off++] = MAKE_MODRM(3, DISGREG_EAX, pDis->Param1.Base.idxGenReg);
    21042104            }
    21052105
    2106             if (pDis->Param1.base.reg_gen != DISGREG_EAX)
     2106            if (pDis->Param1.Base.idxGenReg != DISGREG_EAX)
    21072107                aPatch[off++] = 0x58;    /* pop eax */
    2108             if (pDis->Param1.base.reg_gen != DISGREG_EDX )
     2108            if (pDis->Param1.Base.idxGenReg != DISGREG_EDX )
    21092109                aPatch[off++] = 0x5A;    /* pop edx */
    2110             if (pDis->Param1.base.reg_gen != DISGREG_ECX)
     2110            if (pDis->Param1.Base.idxGenReg != DISGREG_ECX)
    21112111                aPatch[off++] = 0x59;    /* pop ecx */
    21122112        }
  • trunk/src/VBox/VMM/VMMR3/PATM.cpp

    r41741 r41744  
    17491749            /* mov ss, src? */
    17501750            if (    (pCpu->Param1.fUse & DISUSE_REG_SEG)
    1751                 &&  (pCpu->Param1.base.reg_seg == DISSELREG_SS))
     1751                &&  (pCpu->Param1.Base.idxSegReg == DISSELREG_SS))
    17521752            {
    17531753                Log(("Force recompilation of next instruction for OP_MOV at %RRv\n", pCurInstrGC));
     
    17581758            else
    17591759            if (    (pCpu->Param2.fUse & DISUSE_REG_SEG)
    1760                 &&  (pCpu->Param2.base.reg_seg == USE_REG_SS)
     1760                &&  (pCpu->Param2.Base.idxSegReg == USE_REG_SS)
    17611761                &&  (pCpu->Param1.fUse & (DISUSE_REG_GEN32|DISUSE_REG_GEN16)))     /** @todo memory operand must in theory be handled too */
    17621762            {
  • trunk/src/VBox/VMM/VMMR3/PATMPatch.cpp

    r41741 r41744  
    11671167        Assert(pCpu->Param2.fUse & DISUSE_REG_GEN32);
    11681168
    1169         dbgreg = pCpu->Param1.base.reg_dbg;
    1170         reg    = pCpu->Param2.base.reg_gen;
     1169        dbgreg = pCpu->Param1.Base.idxDbgReg;
     1170        reg    = pCpu->Param2.Base.idxGenReg;
    11711171    }
    11721172    else
     
    11771177
    11781178        pPB[0] = 0x8B;      // mov GPR, disp32
    1179         reg    = pCpu->Param1.base.reg_gen;
    1180         dbgreg = pCpu->Param2.base.reg_dbg;
     1179        reg    = pCpu->Param1.Base.idxGenReg;
     1180        dbgreg = pCpu->Param2.Base.idxDbgReg;
    11811181    }
    11821182
     
    12141214        // mov CRx, GPR
    12151215        pPB[0] = 0x89;      //mov disp32, GPR
    1216         ctrlreg = pCpu->Param1.base.reg_ctrl;
    1217         reg     = pCpu->Param2.base.reg_gen;
     1216        ctrlreg = pCpu->Param1.Base.idxCtrlReg;
     1217        reg     = pCpu->Param2.Base.idxGenReg;
    12181218        Assert(pCpu->Param1.fUse & DISUSE_REG_CR);
    12191219        Assert(pCpu->Param2.fUse & DISUSE_REG_GEN32);
     
    12261226
    12271227        pPB[0]  = 0x8B;      // mov GPR, disp32
    1228         reg     = pCpu->Param1.base.reg_gen;
    1229         ctrlreg = pCpu->Param2.base.reg_ctrl;
     1228        reg     = pCpu->Param1.Base.idxGenReg;
     1229        ctrlreg = pCpu->Param2.Base.idxCtrlReg;
    12301230    }
    12311231
     
    12921292    if (pCpu->fPrefix & DISPREFIX_OPSIZE)
    12931293        pPB[offset++] = 0x66; /* size override -> 16 bits pop */
    1294     pPB[offset++] = 0x58 + pCpu->Param1.base.reg_gen;
     1294    pPB[offset++] = 0x58 + pCpu->Param1.Base.idxGenReg;
    12951295    PATCHGEN_EPILOG(pPatch, offset);
    12961296
     
    13351335        pPB[offset++] = 0x8B;              // mov       destreg, CPUMCTX.tr/ldtr
    13361336        /* Modify REG part according to destination of original instruction */
    1337         pPB[offset++] = MAKE_MODRM(0, pCpu->Param1.base.reg_gen, 5);
     1337        pPB[offset++] = MAKE_MODRM(0, pCpu->Param1.Base.idxGenReg, 5);
    13381338        if (pCpu->pCurInstr->uOpcode == OP_STR)
    13391339        {
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