VirtualBox

Changeset 41662 in vbox


Ignore:
Timestamp:
Jun 12, 2012 8:29:07 AM (13 years ago)
Author:
vboxsync
Message:

DIS,CSAM: Combine the displacement members of OP_PARAMETER into a union to save a little bit of space.

Location:
trunk
Files:
5 edited

Legend:

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

    r41658 r41662  
    372372    uint64_t        parval;
    373373    uint64_t        flags;
    374     int64_t         disp64;
    375     int32_t         disp32;
    376     int32_t         disp16;
    377     int32_t         disp8;
     374    union
     375    {
     376        int64_t     i64;
     377        int32_t     i32;
     378        int32_t     i16;
     379        int32_t     i8;
     380        uint64_t    u64;
     381        uint32_t    u32;
     382        uint32_t    u16;
     383        uint32_t    u8;
     384    } uDisp;
    378385    uint32_t        size;
    379386    int32_t         param;
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r41661 r41662  
    549549        {
    550550            pParam->flags |= USE_DISPLACEMENT32;
    551             pParam->disp32 = pCpu->i32SibDisp;
     551            pParam->uDisp.i32 = pCpu->i32SibDisp;
    552552            disasmAddChar(pParam->szParam, '+');
    553553            disasmPrintDisp32(pParam);
     
    556556        {   /* sign-extend to 64 bits */
    557557            pParam->flags |= USE_DISPLACEMENT64;
    558             pParam->disp64 = pCpu->i32SibDisp;
     558            pParam->uDisp.i64 = pCpu->i32SibDisp;
    559559            disasmAddChar(pParam->szParam, '+');
    560560            disasmPrintDisp64(pParam);
     
    737737                {
    738738                    pParam->flags |= USE_DISPLACEMENT32;
    739                     pParam->disp32 = pCpu->i32SibDisp;
     739                    pParam->uDisp.i32 = pCpu->i32SibDisp;
    740740                    disasmPrintDisp32(pParam);
    741741                }
     
    743743                {
    744744                    pParam->flags |= USE_RIPDISPLACEMENT32;
    745                     pParam->disp32 = pCpu->i32SibDisp;
     745                    pParam->uDisp.i32 = pCpu->i32SibDisp;
    746746                    disasmAddString(pParam->szParam, "RIP+");
    747747                    disasmPrintDisp32(pParam);
    748748                }
    749749            }
    750             else {//register address
     750            else
     751            {   //register address
    751752                pParam->flags |= USE_BASE;
    752753                disasmModRMReg(pCpu, pOp, rm, pParam, 1);
     
    766767                disasmModRMReg(pCpu, pOp, rm, pParam, 1);
    767768            }
    768             pParam->disp8 = pCpu->i32SibDisp;
     769            pParam->uDisp.i8 = pCpu->i32SibDisp;
    769770            pParam->flags |= USE_DISPLACEMENT8;
    770771
    771             if (pParam->disp8 != 0)
     772            if (pParam->uDisp.i8 != 0)
    772773            {
    773                 if (pParam->disp8 > 0)
     774                if (pParam->uDisp.i8 > 0)
    774775                    disasmAddChar(pParam->szParam, '+');
    775776                disasmPrintDisp8(pParam);
     
    789790                disasmModRMReg(pCpu, pOp, rm, pParam, 1);
    790791            }
    791             pParam->disp32 = pCpu->i32SibDisp;
     792            pParam->uDisp.i32 = pCpu->i32SibDisp;
    792793            pParam->flags |= USE_DISPLACEMENT32;
    793794
    794             if (pParam->disp32 != 0)
     795            if (pParam->uDisp.i32 != 0)
    795796            {
    796797                disasmAddChar(pParam->szParam, '+');
     
    814815            if (rm == 6)
    815816            {//16 bits displacement
    816                 pParam->disp16 = pCpu->i32SibDisp;
     817                pParam->uDisp.i16 = pCpu->i32SibDisp;
    817818                pParam->flags |= USE_DISPLACEMENT16;
    818819                disasmPrintDisp16(pParam);
     
    830831            disasmAddChar(pParam->szParam, '[');
    831832            disasmModRMReg16(pCpu, pOp, rm, pParam);
    832             pParam->disp8 = pCpu->i32SibDisp;
     833            pParam->uDisp.i8 = pCpu->i32SibDisp;
    833834            pParam->flags |= USE_BASE | USE_DISPLACEMENT8;
    834835
    835             if (pParam->disp8 != 0)
     836            if (pParam->uDisp.i8 != 0)
    836837            {
    837                 if (pParam->disp8 > 0)
     838                if (pParam->uDisp.i8 > 0)
    838839                    disasmAddChar(pParam->szParam, '+');
    839840                disasmPrintDisp8(pParam);
     
    846847            disasmAddChar(pParam->szParam, '[');
    847848            disasmModRMReg16(pCpu, pOp, rm, pParam);
    848             pParam->disp16 = pCpu->i32SibDisp;
     849            pParam->uDisp.i16 = pCpu->i32SibDisp;
    849850            pParam->flags |= USE_BASE | USE_DISPLACEMENT16;
    850851
    851             if (pParam->disp16 != 0)
     852            if (pParam->uDisp.i16 != 0)
    852853            {
    853854                disasmAddChar(pParam->szParam, '+');
     
    14281429             * so we treat it like displacement.
    14291430             */
    1430             pParam->disp32 = DISReadDWord(pCpu, lpszCodeBlock);
     1431            pParam->uDisp.i32 = DISReadDWord(pCpu, lpszCodeBlock);
    14311432            pParam->flags |= USE_DISPLACEMENT32;
    14321433            pParam->size   = sizeof(uint32_t);
    14331434
    1434             disasmAddStringF1(pParam->szParam, "[0%08Xh]", pParam->disp32);
     1435            disasmAddStringF1(pParam->szParam, "[0%08Xh]", pParam->uDisp.i32);
    14351436            return sizeof(uint32_t);
    14361437        }
     
    14451446         * so we treat it like displacement.
    14461447         */
    1447         pParam->disp64 = DISReadQWord(pCpu, lpszCodeBlock);
     1448        pParam->uDisp.i64 = DISReadQWord(pCpu, lpszCodeBlock);
    14481449        pParam->flags |= USE_DISPLACEMENT64;
    14491450        pParam->size   = sizeof(uint64_t);
    14501451
    1451         disasmAddStringF2(pParam->szParam, "[0%08X%08Xh]", (uint32_t)(pParam->disp64 >> 32), (uint32_t)pParam->disp64);
     1452        disasmAddStringF2(pParam->szParam, "[0%08X%08Xh]", (uint32_t)(pParam->uDisp.i64 >> 32), (uint32_t)pParam->uDisp.i64);
    14521453        return sizeof(uint64_t);
    14531454    }
     
    14691470             * so we treat it like displacement.
    14701471             */
    1471             pParam->disp16 = DISReadWord(pCpu, lpszCodeBlock);
     1472            pParam->uDisp.i16 = DISReadWord(pCpu, lpszCodeBlock);
    14721473            pParam->flags |= USE_DISPLACEMENT16;
    14731474            pParam->size   = sizeof(uint16_t);
    14741475
    1475             disasmAddStringF1(pParam->szParam, "[0%04Xh]", (uint32_t)pParam->disp16);
     1476            disasmAddStringF1(pParam->szParam, "[0%04Xh]", (uint32_t)pParam->uDisp.i16);
    14761477            return sizeof(uint16_t);
    14771478        }
     
    24422443void disasmPrintAbs32(POP_PARAMETER pParam)
    24432444{
    2444     disasmAddStringF1(pParam->szParam, "%08Xh", pParam->disp32); NOREF(pParam);
     2445    disasmAddStringF1(pParam->szParam, "%08Xh", pParam->uDisp.i32); NOREF(pParam);
    24452446}
    24462447//*****************************************************************************
     
    24482449void disasmPrintDisp32(POP_PARAMETER pParam)
    24492450{
    2450     disasmAddStringF1(pParam->szParam, "%08Xh", pParam->disp32); NOREF(pParam);
     2451    disasmAddStringF1(pParam->szParam, "%08Xh", pParam->uDisp.i32); NOREF(pParam);
    24512452}
    24522453//*****************************************************************************
     
    24542455void disasmPrintDisp64(POP_PARAMETER pParam)
    24552456{
    2456     disasmAddStringF1(pParam->szParam, "%16RX64h", pParam->disp64); NOREF(pParam);
     2457    disasmAddStringF1(pParam->szParam, "%16RX64h", pParam->uDisp.i64); NOREF(pParam);
    24572458}
    24582459//*****************************************************************************
     
    24602461void disasmPrintDisp8(POP_PARAMETER pParam)
    24612462{
    2462     disasmAddStringF1(pParam->szParam, "%d", pParam->disp8); NOREF(pParam);
     2463    disasmAddStringF1(pParam->szParam, "%d", pParam->uDisp.i8); NOREF(pParam);
    24632464}
    24642465//*****************************************************************************
     
    24662467void disasmPrintDisp16(POP_PARAMETER pParam)
    24672468{
    2468     disasmAddStringF1(pParam->szParam, "%04Xh", pParam->disp16); NOREF(pParam);
     2469    disasmAddStringF1(pParam->szParam, "%04Xh", pParam->uDisp.i16); NOREF(pParam);
    24692470}
    24702471//*****************************************************************************
  • trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp

    r41658 r41662  
    683683                        {
    684684                            if (   (pParam->flags & USE_DISPLACEMENT8)
    685                                 && !pParam->disp8)
     685                                && !pParam->uDisp.i8)
    686686                                PUT_SZ("byte ");
    687687                            else if (   (pParam->flags & USE_DISPLACEMENT16)
    688                                      && (int8_t)pParam->disp16 == (int16_t)pParam->disp16)
     688                                     && (int8_t)pParam->uDisp.i16 == (int16_t)pParam->uDisp.i16)
    689689                                PUT_SZ("word ");
    690690                            else if (   (pParam->flags & USE_DISPLACEMENT32)
    691                                      && (int16_t)pParam->disp32 == (int32_t)pParam->disp32) //??
     691                                     && (int16_t)pParam->uDisp.i32 == (int32_t)pParam->uDisp.i32) //??
    692692                                PUT_SZ("dword ");
    693693                            else if (   (pParam->flags & USE_DISPLACEMENT64)
    694694                                     && (pCpu->SIB.Bits.Base != 5 || pCpu->ModRM.Bits.Mod != 0)
    695                                      && (int32_t)pParam->disp64 == (int64_t)pParam->disp64) //??
     695                                     && (int32_t)pParam->uDisp.i64 == (int64_t)pParam->uDisp.i64) //??
    696696                                PUT_SZ("qword ");
    697697                        }
     
    731731                            int64_t off2;
    732732                            if (pParam->flags & USE_DISPLACEMENT8)
    733                                 off2 = pParam->disp8;
     733                                off2 = pParam->uDisp.i8;
    734734                            else if (pParam->flags & USE_DISPLACEMENT16)
    735                                 off2 = pParam->disp16;
     735                                off2 = pParam->uDisp.i16;
    736736                            else if (pParam->flags & (USE_DISPLACEMENT32 | USE_RIPDISPLACEMENT32))
    737                                 off2 = pParam->disp32;
     737                                off2 = pParam->uDisp.i32;
    738738                            else if (pParam->flags & USE_DISPLACEMENT64)
    739                                 off2 = pParam->disp64;
     739                                off2 = pParam->uDisp.i64;
    740740                            else
    741741                            {
     
    10191019                                break;
    10201020                            case USE_DISPLACEMENT16:
    1021                                 PUT_NUM_16(pParam->disp16);
     1021                                PUT_NUM_16(pParam->uDisp.i16);
    10221022                                if (pfnGetSymbol)
    1023                                     rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), (uint16_t)pParam->disp16, szSymbol, sizeof(szSymbol), &off, pvUser);
     1023                                    rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), pParam->uDisp.u16, szSymbol, sizeof(szSymbol), &off, pvUser);
    10241024                                break;
    10251025                            case USE_DISPLACEMENT32:
    1026                                 PUT_NUM_32(pParam->disp32);
     1026                                PUT_NUM_32(pParam->uDisp.i32);
    10271027                                if (pfnGetSymbol)
    1028                                     rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), (uint32_t)pParam->disp32, szSymbol, sizeof(szSymbol), &off, pvUser);
     1028                                    rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), pParam->uDisp.u32, szSymbol, sizeof(szSymbol), &off, pvUser);
    10291029                                break;
    10301030                            case USE_DISPLACEMENT64:
    1031                                 PUT_NUM_64(pParam->disp64);
     1031                                PUT_NUM_64(pParam->uDisp.i64);
    10321032                                if (pfnGetSymbol)
    1033                                     rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), (uint64_t)pParam->disp64, szSymbol, sizeof(szSymbol), &off, pvUser);
     1033                                    rc = pfnGetSymbol(pCpu, DIS_FMT_SEL_FROM_REG(DIS_SELREG_CS), pParam->uDisp.u64, szSymbol, sizeof(szSymbol), &off, pvUser);
    10341034                                break;
    10351035                            default:
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r39086 r41662  
    603603        {
    604604            if (pCpu->mode == CPUMODE_32BIT)
    605                 pParamVal->val.val32 += (int32_t)pParam->disp8;
     605                pParamVal->val.val32 += (int32_t)pParam->uDisp.i8;
    606606            else
    607607            if (pCpu->mode == CPUMODE_64BIT)
    608                 pParamVal->val.val64 += (int64_t)pParam->disp8;
    609             else
    610                 pParamVal->val.val16 += (int16_t)pParam->disp8;
     608                pParamVal->val.val64 += (int64_t)pParam->uDisp.i8;
     609            else
     610                pParamVal->val.val16 += (int16_t)pParam->uDisp.i8;
    611611        }
    612612        else
     
    614614        {
    615615            if (pCpu->mode == CPUMODE_32BIT)
    616                 pParamVal->val.val32 += (int32_t)pParam->disp16;
     616                pParamVal->val.val32 += (int32_t)pParam->uDisp.i16;
    617617            else
    618618            if (pCpu->mode == CPUMODE_64BIT)
    619                 pParamVal->val.val64 += (int64_t)pParam->disp16;
    620             else
    621                 pParamVal->val.val16 += pParam->disp16;
     619                pParamVal->val.val64 += (int64_t)pParam->uDisp.i16;
     620            else
     621                pParamVal->val.val16 += pParam->uDisp.i16;
    622622        }
    623623        else
     
    625625        {
    626626            if (pCpu->mode == CPUMODE_32BIT)
    627                 pParamVal->val.val32 += pParam->disp32;
    628             else
    629                 pParamVal->val.val64 += pParam->disp32;
     627                pParamVal->val.val32 += pParam->uDisp.i32;
     628            else
     629                pParamVal->val.val64 += pParam->uDisp.i32;
    630630        }
    631631        else
     
    633633        {
    634634            Assert(pCpu->mode == CPUMODE_64BIT);
    635             pParamVal->val.val64 += (int64_t)pParam->disp64;
     635            pParamVal->val.val64 += pParam->uDisp.i64;
    636636        }
    637637        else
     
    640640            Assert(pCpu->mode == CPUMODE_64BIT);
    641641            /* Relative to the RIP of the next instruction. */
    642             pParamVal->val.val64 += pParam->disp32 + pCtx->rip + pCpu->opsize;
     642            pParamVal->val.val64 += pParam->uDisp.i32 + pCtx->rip + pCpu->opsize;
    643643        }
    644644        return VINF_SUCCESS;
  • trunk/src/VBox/VMM/VMMR3/CSAM.cpp

    r41659 r41662  
    13331333            {
    13341334                addr = 0;
    1335                 PGMPhysSimpleReadGCPtr(pVCpu, &addr, (RTRCUINTPTR)cpu.param1.disp32, sizeof(addr));
     1335                PGMPhysSimpleReadGCPtr(pVCpu, &addr, (RTRCUINTPTR)cpu.param1.uDisp.i32, sizeof(addr));
    13361336            }
    13371337            else
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