VirtualBox

Changeset 8149 in vbox


Ignore:
Timestamp:
Apr 18, 2008 1:56:29 PM (16 years ago)
Author:
vboxsync
Message:

More 64 bits disassembler updates

Location:
trunk
Files:
3 edited

Legend:

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

    r8142 r8149  
    124124 * @{
    125125 */
    126 #define USE_BASE                        RT_BIT(0)
    127 #define USE_INDEX                       RT_BIT(1)
    128 #define USE_SCALE                       RT_BIT(2)
    129 #define USE_REG_GEN8                    RT_BIT(3)
    130 #define USE_REG_GEN16                   RT_BIT(4)
    131 #define USE_REG_GEN32                   RT_BIT(5)
    132 #define USE_REG_FP                      RT_BIT(6)
    133 #define USE_REG_MMX                     RT_BIT(7)
    134 #define USE_REG_XMM                     RT_BIT(8)
    135 #define USE_REG_CR                      RT_BIT(9)
    136 #define USE_REG_DBG                     RT_BIT(10)
    137 #define USE_REG_SEG                     RT_BIT(11)
    138 #define USE_REG_TEST                    RT_BIT(12)
    139 #define USE_DISPLACEMENT8               RT_BIT(13)
    140 #define USE_DISPLACEMENT16              RT_BIT(14)
    141 #define USE_DISPLACEMENT32              RT_BIT(15)
    142 #define USE_IMMEDIATE8                  RT_BIT(16)
    143 #define USE_IMMEDIATE8_REL              RT_BIT(17)
    144 #define USE_IMMEDIATE16                 RT_BIT(18)
    145 #define USE_IMMEDIATE16_REL             RT_BIT(19)
    146 #define USE_IMMEDIATE32                 RT_BIT(20)
    147 #define USE_IMMEDIATE32_REL             RT_BIT(21)
    148 #define USE_IMMEDIATE64                 RT_BIT(22)
    149 #define USE_IMMEDIATE_ADDR_0_32         RT_BIT(23)
    150 #define USE_IMMEDIATE_ADDR_16_32        RT_BIT(24)
    151 #define USE_IMMEDIATE_ADDR_0_16         RT_BIT(25)
    152 #define USE_IMMEDIATE_ADDR_16_16        RT_BIT(26)
     126#define USE_BASE                        RT_BIT_64(0)
     127#define USE_INDEX                       RT_BIT_64(1)
     128#define USE_SCALE                       RT_BIT_64(2)
     129#define USE_REG_GEN8                    RT_BIT_64(3)
     130#define USE_REG_GEN16                   RT_BIT_64(4)
     131#define USE_REG_GEN32                   RT_BIT_64(5)
     132#define USE_REG_GEN64                   RT_BIT_64(6)
     133#define USE_REG_FP                      RT_BIT_64(7)
     134#define USE_REG_MMX                     RT_BIT_64(8)
     135#define USE_REG_XMM                     RT_BIT_64(9)
     136#define USE_REG_CR                      RT_BIT_64(10)
     137#define USE_REG_DBG                     RT_BIT_64(11)
     138#define USE_REG_SEG                     RT_BIT_64(12)
     139#define USE_REG_TEST                    RT_BIT_64(13)
     140#define USE_DISPLACEMENT8               RT_BIT_64(14)
     141#define USE_DISPLACEMENT16              RT_BIT_64(15)
     142#define USE_DISPLACEMENT32              RT_BIT_64(16)
     143#define USE_IMMEDIATE8                  RT_BIT_64(17)
     144#define USE_IMMEDIATE8_REL              RT_BIT_64(18)
     145#define USE_IMMEDIATE16                 RT_BIT_64(19)
     146#define USE_IMMEDIATE16_REL             RT_BIT_64(20)
     147#define USE_IMMEDIATE32                 RT_BIT_64(21)
     148#define USE_IMMEDIATE32_REL             RT_BIT_64(22)
     149#define USE_IMMEDIATE64                 RT_BIT_64(23)
     150#define USE_IMMEDIATE_ADDR_0_32         RT_BIT_64(24)
     151#define USE_IMMEDIATE_ADDR_16_32        RT_BIT_64(25)
     152#define USE_IMMEDIATE_ADDR_0_16         RT_BIT_64(26)
     153#define USE_IMMEDIATE_ADDR_16_16        RT_BIT_64(27)
    153154/** DS:ESI */
    154 #define USE_POINTER_DS_BASED            RT_BIT(27)
     155#define USE_POINTER_DS_BASED            RT_BIT_64(28)
    155156/** ES:EDI */
    156 #define USE_POINTER_ES_BASED            RT_BIT(28)
    157 #define USE_IMMEDIATE16_SX8             RT_BIT(29)
    158 #define USE_IMMEDIATE32_SX8             RT_BIT(30)
     157#define USE_POINTER_ES_BASED            RT_BIT_64(29)
     158#define USE_IMMEDIATE16_SX8             RT_BIT_64(30)
     159#define USE_IMMEDIATE32_SX8             RT_BIT_64(31)
    159160
    160161#define USE_IMMEDIATE                   (USE_IMMEDIATE8|USE_IMMEDIATE16|USE_IMMEDIATE32|USE_IMMEDIATE64|USE_IMMEDIATE8_REL|USE_IMMEDIATE16_REL|USE_IMMEDIATE32_REL|USE_IMMEDIATE_ADDR_0_32|USE_IMMEDIATE_ADDR_16_32|USE_IMMEDIATE_ADDR_0_16|USE_IMMEDIATE_ADDR_16_16|USE_IMMEDIATE16_SX8|USE_IMMEDIATE32_SX8)
     
    291292{
    292293    uint32_t        type;
    293     uint32_t        flags;
    294294    uint32_t        size;
     295    uint64_t        flags;
    295296
    296297    union
     
    331332    int32_t         disp8, disp16, disp32;
    332333
    333     uint32_t        flags;
    334 
    335334    uint32_t        size;
     335
     336    uint64_t        flags;
    336337
    337338    union
     
    340341        uint32_t    reg_gen16;
    341342        uint32_t    reg_gen32;
     343        uint64_t    reg_gen64;
    342344        /** ST(0) - ST(7) */
    343345        uint32_t    reg_fp;
     
    351353        uint32_t    reg_test;
    352354        /** CR0-CR4 */
    353         uint32_t    reg_ctrl;
     355        uint64_t    reg_ctrl;
    354356        /** DR0-DR7 */
    355357        uint32_t    reg_dbg;
     
    568570 */
    569571DISDECL(int) DISQueryParamVal(PCPUMCTXCORE pCtx, PDISCPUSTATE pCpu, POP_PARAMETER pParam, POP_PARAMVAL pParamVal, PARAM_TYPE parmtype);
    570 DISDECL(int) DISQueryParamRegPtr(PCPUMCTXCORE pCtx, PDISCPUSTATE pCpu, POP_PARAMETER pParam, uint32_t **ppReg, size_t *pcbSize);
     572DISDECL(int) DISQueryParamRegPtr(PCPUMCTXCORE pCtx, PDISCPUSTATE pCpu, POP_PARAMETER pParam, void **ppReg, size_t *pcbSize);
    571573
    572574DISDECL(int) DISFetchReg8(PCPUMCTXCORE pCtx, unsigned reg8, uint8_t *pVal);
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r8142 r8149  
    265265        {
    266266            pCpu->lastprefix = opcode;
    267             switch(opcode)
     267            switch (opcode)
    268268            {
    269269            case OP_INVALID:
     
    287287            case OP_ADRSIZE:
    288288                pCpu->prefix |= PREFIX_ADDRSIZE;
    289                 if(pCpu->mode == CPUMODE_16BIT)
     289                if (pCpu->mode == CPUMODE_16BIT)
    290290                     pCpu->addrmode = CPUMODE_32BIT;
    291291                else pCpu->addrmode = CPUMODE_16BIT;
     
    296296            case OP_OPSIZE:
    297297                pCpu->prefix |= PREFIX_OPSIZE;
    298                 if(pCpu->mode == CPUMODE_16BIT)
     298                if (pCpu->mode == CPUMODE_16BIT)
    299299                     pCpu->opmode = CPUMODE_32BIT;
    300300                else pCpu->opmode = CPUMODE_16BIT;
     
    378378    pCpu->param3.param = pOp->param3;
    379379
    380     if(pOp->idxParse1 != IDX_ParseNop) {
     380    if (pOp->idxParse1 != IDX_ParseNop)
     381    {
    381382        size += pCpu->pfnDisasmFnTable[pOp->idxParse1](lpszCodeBlock, pOp, &pCpu->param1, pCpu);
    382383        if (fFiltered == false) pCpu->param1.size = DISGetParamSize(pCpu, &pCpu->param1);
    383384    }
    384     if(pOp->idxParse2 != IDX_ParseNop) {
     385
     386    if (pOp->idxParse2 != IDX_ParseNop)
     387    {
    385388        size += pCpu->pfnDisasmFnTable[pOp->idxParse2](lpszCodeBlock+size, pOp, &pCpu->param2, pCpu);
    386389        if (fFiltered == false) pCpu->param2.size = DISGetParamSize(pCpu, &pCpu->param2);
    387390    }
    388     if(pOp->idxParse3 != IDX_ParseNop) {
     391
     392    if (pOp->idxParse3 != IDX_ParseNop)
     393    {
    389394        size += pCpu->pfnDisasmFnTable[pOp->idxParse3](lpszCodeBlock+size, pOp, &pCpu->param3, pCpu);
    390395        if (fFiltered == false) pCpu->param3.size = DISGetParamSize(pCpu, &pCpu->param3);
     
    406411
    407412    index = pCpu->opcode - 0xD8;
    408     if(pCpu->ModRM <= 0xBF)
     413    if (pCpu->ModRM <= 0xBF)
    409414    {
    410415        fpop            = &(g_paMapX86_FP_Low[index])[MODRM_REG(pCpu->ModRM)];
     
    430435
    431436        // Little hack to make sure the ModRM byte is included in the returned size
    432         if(fpop->idxParse1 != IDX_ParseModRM && fpop->idxParse2 != IDX_ParseModRM)
    433         {
     437        if (fpop->idxParse1 != IDX_ParseModRM && fpop->idxParse2 != IDX_ParseModRM)
    434438            size = sizeof(uint8_t); //ModRM byte
    435         }
    436 
    437         if(fpop->idxParse1 != IDX_ParseNop) {
     439
     440        if (fpop->idxParse1 != IDX_ParseNop)
    438441            size += pCpu->pfnDisasmFnTable[fpop->idxParse1](lpszCodeBlock+size, (PCOPCODE)fpop, pParam, pCpu);
    439         }
    440         if(fpop->idxParse2 != IDX_ParseNop) {
     442
     443        if (fpop->idxParse2 != IDX_ParseNop)
    441444            size += pCpu->pfnDisasmFnTable[fpop->idxParse2](lpszCodeBlock+size, (PCOPCODE)fpop, pParam, pCpu);
    442         }
    443445    }
    444446    else
     
    490492    index = SIB_INDEX(pCpu->SIB);
    491493
    492     if(szSIBIndexReg[index])
     494    if (szSIBIndexReg[index])
    493495    {
    494496         pParam->flags |= USE_INDEX;
    495497         pParam->index.reg_gen = index;
    496498
    497          if(scale != 0)
     499         if (scale != 0)
    498500         {
    499501             pParam->flags |= USE_SCALE;
     
    501503         }
    502504
    503          if(base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
     505         if (base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
    504506             disasmAddStringF(szTemp, sizeof(szTemp), "%s%s", szSIBIndexReg[index], szSIBScale[scale]);
    505507         else
     
    508510    else
    509511    {
    510          if(base != 5 || MODRM_MOD(pCpu->ModRM) != 0)
     512         if (base != 5 || MODRM_MOD(pCpu->ModRM) != 0)
    511513             disasmAddStringF(szTemp, sizeof(szTemp), "%s", szSIBBaseReg[base]);
    512514    }
    513515
    514     if(base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
     516    if (base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
    515517    {
    516518        // [scaled index] + disp32
     
    540542
    541543    base = SIB_BASE(pCpu->SIB);
    542     if(base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
     544    if (base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
    543545    {//additional 32 bits displacement
    544546        pCpu->disp = DISReadDWord(pCpu, lpszCodeBlock);
     
    557559
    558560    base = SIB_BASE(pCpu->SIB);
    559     if(base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
     561    if (base == 5 && MODRM_MOD(pCpu->ModRM) == 0)
    560562    {//additional 32 bits displacement
    561563        size += sizeof(int32_t);
     
    575577    int vtype = OP_PARM_VTYPE(pParam->param);
    576578
    577     switch(vtype)
     579    switch (vtype)
    578580    {
    579581    case OP_PARM_G: //general purpose register
     
    584586        if (IS_OP_PARM_RARE(vtype))
    585587        {
    586             switch(vtype)
     588            switch (vtype)
    587589            {
    588590            case OP_PARM_C: //control register
     
    636638    //TODO: bound
    637639
    638     if(pCpu->addrmode == CPUMODE_32BIT)
     640    if (pCpu->addrmode == CPUMODE_32BIT)
    639641    {//32 bits addressing mode
    640         switch(mod)
     642        switch (mod)
    641643        {
    642644        case 0: //effective address
    643645            disasmGetPtrString(pCpu, pOp, pParam);
    644646            disasmAddChar(pParam->szParam, '[');
    645             if(rm == 4) {//SIB byte follows ModRM
     647            if (rm == 4) {//SIB byte follows ModRM
    646648                UseSIB(lpszCodeBlock, pOp, pParam, pCpu);
    647649            }
    648650            else
    649             if(rm == 5) {//32 bits displacement
     651            if (rm == 5) {//32 bits displacement
    650652                pParam->flags |= USE_DISPLACEMENT32;
    651653                pParam->disp32 = pCpu->disp;
     
    662664            disasmGetPtrString(pCpu, pOp, pParam);
    663665            disasmAddChar(pParam->szParam, '[');
    664             if(rm == 4) {//SIB byte follows ModRM
     666            if (rm == 4) {//SIB byte follows ModRM
    665667                UseSIB(lpszCodeBlock, pOp, pParam, pCpu);
    666668            }
     
    673675            pParam->flags |= USE_DISPLACEMENT8;
    674676
    675             if(pParam->disp8 != 0)
     677            if (pParam->disp8 != 0)
    676678            {
    677                 if(pParam->disp8 > 0)
     679                if (pParam->disp8 > 0)
    678680                    disasmAddChar(pParam->szParam, '+');
    679681                disasmPrintDisp8(pParam);
     
    685687            disasmGetPtrString(pCpu, pOp, pParam);
    686688            disasmAddChar(pParam->szParam, '[');
    687             if(rm == 4) {//SIB byte follows ModRM
     689            if (rm == 4) {//SIB byte follows ModRM
    688690                UseSIB(lpszCodeBlock, pOp, pParam, pCpu);
    689691            }
     
    696698            pParam->flags |= USE_DISPLACEMENT32;
    697699
    698             if(pParam->disp32 != 0)
     700            if (pParam->disp32 != 0)
    699701            {
    700702                disasmAddChar(pParam->szParam, '+');
     
    711713    else
    712714    {//16 bits addressing mode
    713         switch(mod)
     715        switch (mod)
    714716        {
    715717        case 0: //effective address
    716718            disasmGetPtrString(pCpu, pOp, pParam);
    717719            disasmAddChar(pParam->szParam, '[');
    718             if(rm == 6)
     720            if (rm == 6)
    719721            {//16 bits displacement
    720722                pParam->disp16 = pCpu->disp;
     
    737739            pParam->flags |= USE_BASE | USE_DISPLACEMENT8;
    738740
    739             if(pParam->disp8 != 0)
     741            if (pParam->disp8 != 0)
    740742            {
    741                 if(pParam->disp8 > 0)
     743                if (pParam->disp8 > 0)
    742744                    disasmAddChar(pParam->szParam, '+');
    743745                disasmPrintDisp8(pParam);
     
    753755            pParam->flags |= USE_BASE | USE_DISPLACEMENT16;
    754756
    755             if(pParam->disp16 != 0)
     757            if (pParam->disp16 != 0)
    756758            {
    757759                disasmAddChar(pParam->szParam, '+');
     
    779781    mod = MODRM_MOD(pCpu->ModRM);
    780782
    781     if(!pSibInc)
     783    if (!pSibInc)
    782784    {
    783785        pSibInc = &sibinc;
     
    786788    *pSibInc = 0;
    787789
    788     if(pCpu->addrmode == CPUMODE_32BIT)
     790    if (pCpu->addrmode == CPUMODE_32BIT)
    789791    {//32 bits addressing mode
    790         if(mod != 3 && rm == 4)
     792        if (mod != 3 && rm == 4)
    791793        {//SIB byte follows ModRM
    792794            *pSibInc = ParseSIB(lpszCodeBlock, pOp, pParam, pCpu);
     
    795797        }
    796798
    797         switch(mod)
     799        switch (mod)
    798800        {
    799801        case 0: //effective address
    800             if(rm == 5) {//32 bits displacement
     802            if (rm == 5) {//32 bits displacement
    801803                pCpu->disp = DISReadDWord(pCpu, lpszCodeBlock);
    802804                size += sizeof(int32_t);
     
    821823    else
    822824    {//16 bits addressing mode
    823         switch(mod)
     825        switch (mod)
    824826        {
    825827        case 0: //effective address
    826             if(rm == 6) {
     828            if (rm == 6) {
    827829                pCpu->disp = DISReadWord(pCpu, lpszCodeBlock);
    828830                size += sizeof(uint16_t);
     
    857859    mod = MODRM_MOD(pCpu->ModRM);
    858860
    859     if(!pSibInc)
     861    if (!pSibInc)
    860862    {
    861863        pSibInc = &sibinc;
     
    864866    *pSibInc = 0;
    865867
    866     if(pCpu->addrmode == CPUMODE_32BIT)
     868    if (pCpu->addrmode == CPUMODE_32BIT)
    867869    {//32 bits addressing mode
    868         if(mod != 3 && rm == 4)
     870        if (mod != 3 && rm == 4)
    869871        {//SIB byte follows ModRM
    870872            *pSibInc = ParseSIB_SizeOnly(lpszCodeBlock, pOp, pParam, pCpu);
     
    873875        }
    874876
    875         switch(mod)
     877        switch (mod)
    876878        {
    877879        case 0: //effective address
    878             if(rm == 5) {//32 bits displacement
     880            if (rm == 5) {//32 bits displacement
    879881                size += sizeof(int32_t);
    880882            }
     
    896898    else
    897899    {//16 bits addressing mode
    898         switch(mod)
     900        switch (mod)
    899901        {
    900902        case 0: //effective address
    901             if(rm == 6) {
     903            if (rm == 6) {
    902904                size += sizeof(uint16_t);
    903905            }
     
    986988unsigned ParseImmByteSX(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    987989{
    988     if(pCpu->opmode == CPUMODE_32BIT)
     990    if (pCpu->opmode == CPUMODE_32BIT)
    989991    {
    990992        pParam->parval = (uint32_t)(int8_t)DISReadByte(pCpu, lpszCodeBlock);
     
    10591061unsigned ParseImmV(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    10601062{
    1061     if(pCpu->opmode == CPUMODE_32BIT)
     1063    if (pCpu->opmode == CPUMODE_32BIT)
    10621064    {
    10631065        pParam->parval = DISReadDWord(pCpu, lpszCodeBlock);
     
    10801082unsigned ParseImmV_SizeOnly(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    10811083{
    1082     if(pCpu->opmode == CPUMODE_32BIT)
     1084    if (pCpu->opmode == CPUMODE_32BIT)
    10831085    {
    10841086        return sizeof(uint32_t);
     
    11121114unsigned ParseImmVRel(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    11131115{
    1114     if(pCpu->opmode == CPUMODE_32BIT)
     1116    if (pCpu->opmode == CPUMODE_32BIT)
    11151117    {
    11161118        pParam->parval = DISReadDWord(pCpu, lpszCodeBlock);
     
    11341136unsigned ParseImmVRel_SizeOnly(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    11351137{
    1136     if(pCpu->opmode == CPUMODE_32BIT)
     1138    if (pCpu->opmode == CPUMODE_32BIT)
    11371139    {
    11381140        return sizeof(int32_t);
     
    11481150{
    11491151    disasmGetPtrString(pCpu, pOp, pParam);
    1150     if(pCpu->addrmode == CPUMODE_32BIT)
    1151     {
    1152         if(OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
     1152    if (pCpu->addrmode == CPUMODE_32BIT)
     1153    {
     1154        if (OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
    11531155        {// far 16:32 pointer
    11541156            pParam->parval = DISReadDWord(pCpu, lpszCodeBlock);
     
    11741176    else
    11751177    {
    1176         if(OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
     1178        if (OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
    11771179        {// far 16:16 pointer
    11781180            pParam->parval = DISReadDWord(pCpu, lpszCodeBlock);
     
    12001202unsigned ParseImmAddr_SizeOnly(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu)
    12011203{
    1202     if(pCpu->addrmode == CPUMODE_32BIT)
    1203     {
    1204         if(OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
     1204    if (pCpu->addrmode == CPUMODE_32BIT)
     1205    {
     1206        if (OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
    12051207        {// far 16:32 pointer
    12061208            return sizeof(uint32_t) + sizeof(uint16_t);
     
    12131215    else
    12141216    {
    1215         if(OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
     1217        if (OP_PARM_VSUBTYPE(pParam->param) == OP_PARM_p)
    12161218        {// far 16:16 pointer
    12171219            return sizeof(uint32_t);
     
    12311233     */
    12321234
    1233     if(pParam->param == OP_PARM_NONE)
     1235    if (pParam->param == OP_PARM_NONE)
    12341236    {
    12351237        /* No parameter at all. */
     
    12371239    }
    12381240
    1239     if(pParam->param < OP_PARM_REG_SEG_START)
     1241    if (pParam->param < OP_PARM_REG_SEG_START)
    12401242    {
    12411243        /* 32-bit EAX..EDI registers. */
    12421244
    1243         if(pCpu->opmode == CPUMODE_32BIT)
     1245        if (pCpu->opmode == CPUMODE_32BIT)
    12441246        {
    12451247            /* Use 32-bit registers. */
     
    12581260    }
    12591261    else
    1260     if(pParam->param < OP_PARM_REG_GEN16_START)
     1262    if (pParam->param < OP_PARM_REG_GEN16_START)
    12611263    {
    12621264        /* Segment ES..GS registers. */
     
    12661268    }
    12671269    else
    1268     if(pParam->param < OP_PARM_REG_GEN8_START)
     1270    if (pParam->param < OP_PARM_REG_GEN8_START)
    12691271    {
    12701272        /* 16-bit AX..DI registers. */
     
    12741276    }
    12751277    else
    1276     if(pParam->param < OP_PARM_REG_FP_START)
     1278    if (pParam->param < OP_PARM_REG_FP_START)
    12771279    {
    12781280        /* 8-bit AL..DL, AH..DH registers. */
     
    12821284    }
    12831285    else
    1284     if(pParam->param <= OP_PARM_REGFP_7)
     1286    if (pParam->param <= OP_PARM_REGFP_7)
    12851287    {
    12861288        /* FPU registers. */
     
    13011303
    13021304    pParam->flags |= USE_POINTER_DS_BASED;
    1303     if(pCpu->addrmode == CPUMODE_32BIT)
     1305    if (pCpu->addrmode == CPUMODE_32BIT)
    13041306    {
    13051307        pParam->base.reg_gen32 = USE_REG_ESI;
     
    13201322
    13211323    pParam->flags |= USE_POINTER_DS_BASED;
    1322     if(pCpu->addrmode == CPUMODE_32BIT)
     1324    if (pCpu->addrmode == CPUMODE_32BIT)
    13231325    {
    13241326        pParam->base.reg_gen32 = USE_REG_ESI;
     
    13401342
    13411343    pParam->flags |= USE_POINTER_ES_BASED;
    1342     if(pCpu->addrmode == CPUMODE_32BIT)
     1344    if (pCpu->addrmode == CPUMODE_32BIT)
    13431345    {
    13441346        pParam->base.reg_gen32 = USE_REG_EDI;
     
    13591361
    13601362    pParam->flags |= USE_POINTER_ES_BASED;
    1361     if(pCpu->addrmode == CPUMODE_32BIT)
     1363    if (pCpu->addrmode == CPUMODE_32BIT)
    13621364    {
    13631365        pParam->base.reg_gen32 = USE_REG_EDI;
     
    13861388    if (pCpu->lastprefix)
    13871389    {
    1388         switch(pCpu->lastprefix)
     1390        switch (pCpu->lastprefix)
    13891391        {
    13901392        case OP_OPSIZE: /* 0x66 */
     
    14561458    pOp = (PCOPCODE)&g_aMapX86_Group1[idx+reg];
    14571459    //little hack to make sure the ModRM byte is included in the returned size
    1458     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1460    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    14591461    {
    14601462        size = sizeof(uint8_t); //ModRM byte
     
    14721474    unsigned size = 0, modrm, reg;
    14731475
    1474     switch(pCpu->opcode)
     1476    switch (pCpu->opcode)
    14751477    {
    14761478    case 0xC0:
     
    14971499
    14981500    //little hack to make sure the ModRM byte is included in the returned size
    1499     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1501    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    15001502    {
    15011503        size = sizeof(uint8_t); //ModRM byte
     
    15191521
    15201522    //little hack to make sure the ModRM byte is included in the returned size
    1521     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1523    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    15221524    {
    15231525        size = sizeof(uint8_t); //ModRM byte
     
    15401542
    15411543    //little hack to make sure the ModRM byte is included in the returned size
    1542     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1544    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    15431545    {
    15441546        size = sizeof(uint8_t); //ModRM byte
     
    15611563
    15621564    //little hack to make sure the ModRM byte is included in the returned size
    1563     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1565    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    15641566    {
    15651567        size = sizeof(uint8_t); //ModRM byte
     
    15941596
    15951597    //little hack to make sure the ModRM byte is included in the returned size
    1596     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1598    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    15971599    {
    15981600#ifdef DEBUG_Sander /* bird, 2005-06-28: Alex is getting this during full installation of win2ksp4. */
     
    16191621
    16201622    //little hack to make sure the ModRM byte is included in the returned size
    1621     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1623    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    16221624    {
    16231625        size = sizeof(uint8_t); //ModRM byte
     
    16521654
    16531655    //little hack to make sure the ModRM byte is included in the returned size
    1654     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1656    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    16551657    {
    16561658        size = sizeof(uint8_t); //ModRM byte
     
    16731675
    16741676    //little hack to make sure the ModRM byte is included in the returned size
    1675     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1677    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    16761678    {
    16771679        size = sizeof(uint8_t); //ModRM byte
     
    16941696
    16951697    //little hack to make sure the ModRM byte is included in the returned size
    1696     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1698    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    16971699    {
    16981700        size = sizeof(uint8_t); //ModRM byte
     
    17151717
    17161718    //little hack to make sure the ModRM byte is included in the returned size
    1717     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1719    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    17181720    {
    17191721        size = sizeof(uint8_t); //ModRM byte
     
    17331735    reg   = MODRM_REG(modrm);
    17341736
    1735     if(pCpu->prefix & PREFIX_OPSIZE)
     1737    if (pCpu->prefix & PREFIX_OPSIZE)
    17361738    {
    17371739        reg += 8;   //2nd table
     
    17411743
    17421744    //little hack to make sure the ModRM byte is included in the returned size
    1743     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1745    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    17441746    {
    17451747        size = sizeof(uint8_t); //ModRM byte
     
    17581760    modrm = DISReadByte(pCpu, lpszCodeBlock);
    17591761    reg   = MODRM_REG(modrm);
    1760     if(pCpu->prefix & PREFIX_OPSIZE)
     1762    if (pCpu->prefix & PREFIX_OPSIZE)
    17611763    {
    17621764        reg += 8;   //2nd table
     
    17661768
    17671769    //little hack to make sure the ModRM byte is included in the returned size
    1768     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1770    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    17691771    {
    17701772        size = sizeof(uint8_t); //ModRM byte
     
    17831785    modrm = DISReadByte(pCpu, lpszCodeBlock);
    17841786    reg   = MODRM_REG(modrm);
    1785     if(pCpu->prefix & PREFIX_OPSIZE)
     1787    if (pCpu->prefix & PREFIX_OPSIZE)
    17861788    {
    17871789        reg += 8;   //2nd table
     
    17911793
    17921794    //little hack to make sure the ModRM byte is included in the returned size
    1793     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1795    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    17941796    {
    17951797        size = sizeof(uint8_t); //ModRM byte
     
    18171819
    18181820    //little hack to make sure the ModRM byte is included in the returned size
    1819     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1821    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    18201822    {
    18211823        size = sizeof(uint8_t); //ModRM byte
     
    18381840
    18391841    //little hack to make sure the ModRM byte is included in the returned size
    1840     if(pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
     1842    if (pOp->idxParse1 != IDX_ParseModRM && pOp->idxParse2 != IDX_ParseModRM)
    18411843    {
    18421844        size = sizeof(uint8_t); //ModRM byte
     
    18651867    }
    18661868    else
    1867     if(subtype == OP_PARM_v || subtype == OP_PARM_NONE)
     1869    if (subtype == OP_PARM_v || subtype == OP_PARM_NONE)
    18681870    {
    18691871        subtype = (pCpu->opmode == CPUMODE_32BIT) ? OP_PARM_d : OP_PARM_w;
    18701872    }
    18711873
    1872     switch(subtype)
     1874    switch (subtype)
    18731875    {
    18741876    case OP_PARM_b:
     
    19101912    pParam->flags |= USE_REG_GEN16;
    19111913    pParam->base.reg_gen16 = BaseModRMReg16[idx];
    1912     if(idx < 4)
     1914    if (idx < 4)
    19131915    {
    19141916        pParam->flags |= USE_INDEX;
     
    19251927#endif
    19261928#ifdef IN_RING3
    1927     if(idx >= (int)ELEMENTS(szModRMSegReg))
     1929    if (idx >= (int)ELEMENTS(szModRMSegReg))
    19281930    {
    19291931        Log(("disasmModRMSReg %d failed!!\n", idx));
     
    19671969    int subtype = OP_PARM_VSUBTYPE(pParam->param);
    19681970
    1969     if(subtype == OP_PARM_v)
     1971    if (subtype == OP_PARM_v)
    19701972    {
    19711973        subtype = (pCpu->opmode == CPUMODE_32BIT) ? OP_PARM_d : OP_PARM_w;
    19721974    }
    19731975
    1974     switch(subtype)
     1976    switch (subtype)
    19751977    {
    19761978    case OP_PARM_a: //two words or dwords depending on operand size (bound only)
     
    20152017uint8_t DISReadByte(PDISCPUSTATE pCpu, RTUINTPTR pAddress)
    20162018{
    2017     if(pCpu->pfnReadBytes)
     2019    if (pCpu->pfnReadBytes)
    20182020    {
    20192021         uint8_t temp = 0;
     
    20212023
    20222024         rc = pCpu->pfnReadBytes(pAddress, &temp, sizeof(temp), pCpu);
    2023          if(VBOX_FAILURE(rc))
     2025         if (VBOX_FAILURE(rc))
    20242026         {
    20252027             Log(("DISReadByte failed!!\n"));
     
    20392041uint16_t DISReadWord(PDISCPUSTATE pCpu, RTUINTPTR pAddress)
    20402042{
    2041     if(pCpu->pfnReadBytes)
     2043    if (pCpu->pfnReadBytes)
    20422044    {
    20432045         uint16_t temp = 0;
     
    20452047
    20462048         rc = pCpu->pfnReadBytes(pAddress, (uint8_t*)&temp, sizeof(temp), pCpu);
    2047          if(VBOX_FAILURE(rc))
     2049         if (VBOX_FAILURE(rc))
    20482050         {
    20492051             Log(("DISReadWord failed!!\n"));
     
    20632065uint32_t DISReadDWord(PDISCPUSTATE pCpu, RTUINTPTR pAddress)
    20642066{
    2065     if(pCpu->pfnReadBytes)
     2067    if (pCpu->pfnReadBytes)
    20662068    {
    20672069         uint32_t temp = 0;
     
    20692071
    20702072         rc = pCpu->pfnReadBytes(pAddress, (uint8_t*)&temp, sizeof(temp), pCpu);
    2071          if(VBOX_FAILURE(rc))
     2073         if (VBOX_FAILURE(rc))
    20722074         {
    20732075             Log(("DISReadDWord failed!!\n"));
     
    20872089uint64_t DISReadQWord(PDISCPUSTATE pCpu, RTUINTPTR pAddress)
    20882090{
    2089     if(pCpu->pfnReadBytes)
     2091    if (pCpu->pfnReadBytes)
    20902092    {
    20912093         uint64_t temp = 0;
     
    20932095
    20942096         rc = pCpu->pfnReadBytes(pAddress, (uint8_t*)&temp, sizeof(temp), pCpu);
    2095          if(VBOX_FAILURE(rc))
     2097         if (VBOX_FAILURE(rc))
    20962098         {
    20972099             Log(("DISReadQWord %x failed!!\n", pAddress));
  • trunk/src/VBox/VMM/VMMAll/EMAll.cpp

    r8100 r8149  
    14131413        return VERR_EM_INTERPRETER;
    14141414
    1415     rc = DISQueryParamRegPtr(pRegFrame, pCpu, &pCpu->param2, &pParamReg2, &cbSizeParamReg2);
     1415    rc = DISQueryParamRegPtr(pRegFrame, pCpu, &pCpu->param2, (void **)&pParamReg2, &cbSizeParamReg2);
     1416    Assert(cbSizeParamReg2 <= 4);
    14161417    if(VBOX_FAILURE(rc))
    14171418        return VERR_EM_INTERPRETER;
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