VirtualBox

Changeset 8234 in vbox for trunk/src/VBox/Disassembler


Ignore:
Timestamp:
Apr 21, 2008 2:29:54 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
29963
Message:

MMIO: Cleanup up (removed duplicate code)
Disassembler: simplified general purpose register access

Location:
trunk/src/VBox/Disassembler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r8155 r8234  
    532532
    533533        pParam->flags |= USE_BASE | USE_REG_GEN32;
    534         pParam->base.reg_gen32 = base;
     534        pParam->base.reg_gen = base;
    535535    }
    536536    return;   /* Already fetched everything in ParseSIB; no size returned */
     
    12401240        {
    12411241            /* Use 32-bit registers. */
    1242             pParam->base.reg_gen32 = pParam->param - OP_PARM_REG_GEN32_START;
     1242            pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN32_START;
    12431243            pParam->flags |= USE_REG_GEN32;
    12441244            pParam->size   = 4;
     
    12471247        {
    12481248            /* Use 16-bit registers. */
    1249             pParam->base.reg_gen16 = pParam->param - OP_PARM_REG_GEN32_START;
     1249            pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN32_START;
    12501250            pParam->flags |= USE_REG_GEN16;
    12511251            pParam->size   = 2;
     
    12651265    {
    12661266        /* 16-bit AX..DI registers. */
    1267         pParam->base.reg_gen16 = pParam->param - OP_PARM_REG_GEN16_START;
     1267        pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN16_START;
    12681268        pParam->flags |= USE_REG_GEN16;
    12691269        pParam->size   = 2;
     
    12731273    {
    12741274        /* 8-bit AL..DL, AH..DH registers. */
    1275         pParam->base.reg_gen8 = pParam->param - OP_PARM_REG_GEN8_START;
     1275        pParam->base.reg_gen = pParam->param - OP_PARM_REG_GEN8_START;
    12761276        pParam->flags |= USE_REG_GEN8;
    12771277        pParam->size   = 1;
     
    12991299    if (pCpu->addrmode == CPUMODE_32BIT)
    13001300    {
    1301         pParam->base.reg_gen32 = USE_REG_ESI;
     1301        pParam->base.reg_gen = USE_REG_ESI;
    13021302        pParam->flags |= USE_REG_GEN32;
    13031303    }
    13041304    else
    13051305    {
    1306         pParam->base.reg_gen16 = USE_REG_SI;
     1306        pParam->base.reg_gen = USE_REG_SI;
    13071307        pParam->flags |= USE_REG_GEN16;
    13081308    }
     
    13181318    if (pCpu->addrmode == CPUMODE_32BIT)
    13191319    {
    1320         pParam->base.reg_gen32 = USE_REG_ESI;
     1320        pParam->base.reg_gen = USE_REG_ESI;
    13211321        pParam->flags |= USE_REG_GEN32;
    13221322    }
    13231323    else
    13241324    {
    1325         pParam->base.reg_gen16 = USE_REG_SI;
     1325        pParam->base.reg_gen = USE_REG_SI;
    13261326        pParam->flags |= USE_REG_GEN16;
    13271327    }
     
    13381338    if (pCpu->addrmode == CPUMODE_32BIT)
    13391339    {
    1340         pParam->base.reg_gen32 = USE_REG_EDI;
     1340        pParam->base.reg_gen = USE_REG_EDI;
    13411341        pParam->flags |= USE_REG_GEN32;
    13421342    }
    13431343    else
    13441344    {
    1345         pParam->base.reg_gen16 = USE_REG_DI;
     1345        pParam->base.reg_gen = USE_REG_DI;
    13461346        pParam->flags |= USE_REG_GEN16;
    13471347    }
     
    13571357    if (pCpu->addrmode == CPUMODE_32BIT)
    13581358    {
    1359         pParam->base.reg_gen32 = USE_REG_EDI;
     1359        pParam->base.reg_gen = USE_REG_EDI;
    13601360        pParam->flags |= USE_REG_GEN32;
    13611361    }
    13621362    else
    13631363    {
    1364         pParam->base.reg_gen16 = USE_REG_DI;
     1364        pParam->base.reg_gen = USE_REG_DI;
    13651365        pParam->flags |= USE_REG_GEN16;
    13661366    }
     
    18261826        disasmAddString(pParam->szParam, szModRMReg8[idx]);
    18271827        pParam->flags |= USE_REG_GEN8;
    1828         pParam->base.reg_gen8 = idx;
     1828        pParam->base.reg_gen = idx;
    18291829        break;
    18301830
     
    18321832        disasmAddString(pParam->szParam, szModRMReg16[idx]);
    18331833        pParam->flags |= USE_REG_GEN16;
    1834         pParam->base.reg_gen16 = idx;
     1834        pParam->base.reg_gen = idx;
    18351835        break;
    18361836
     
    18381838        disasmAddString(pParam->szParam, szModRMReg32[idx]);
    18391839        pParam->flags |= USE_REG_GEN32;
    1840         pParam->base.reg_gen32 = idx;
     1840        pParam->base.reg_gen = idx;
    18411841        break;
    18421842
     
    18601860    disasmAddString(pParam->szParam, szModRMReg1616[idx]);
    18611861    pParam->flags |= USE_REG_GEN16;
    1862     pParam->base.reg_gen16 = BaseModRMReg16[idx];
     1862    pParam->base.reg_gen = BaseModRMReg16[idx];
    18631863    if (idx < 4)
    18641864    {
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r8168 r8234  
    207207        return 8;
    208208
    209     case OP_PARM_p:
     209    case OP_PARM_p: /* far pointer */
    210210        if (pCpu->addrmode == CPUMODE_32BIT)
    211             return 8;
    212         else
    213             return 4;
     211            return 6;   /* 16:32 */
     212        else
     213        if (pCpu->addrmode == CPUMODE_64BIT)
     214            return 12;  /* 16:64 */
     215        else
     216            return 4;   /* 16:16 */
    214217
    215218    default:
     
    232235    {
    233236        /* Guess segment register by parameter type. */
    234         if (pParam->flags & USE_REG_GEN32)
    235         {
    236             if (pParam->base.reg_gen32 == USE_REG_ESP || pParam->base.reg_gen32 == USE_REG_EBP)
    237                 return USE_REG_SS;
    238         }
    239         else
    240         if (pParam->flags & USE_REG_GEN16)
    241         {
    242             if (pParam->base.reg_gen16 == USE_REG_SP || pParam->base.reg_gen16 == USE_REG_BP)
     237        if (pParam->flags & (USE_REG_GEN32|USE_REG_GEN64|USE_REG_GEN16))
     238        {
     239            AssertCompile(USE_REG_ESP == USE_REG_RSP);
     240            AssertCompile(USE_REG_EBP == USE_REG_RBP);
     241            AssertCompile(USE_REG_ESP == USE_REG_SP);
     242            AssertCompile(USE_REG_EBP == USE_REG_BP);
     243            if (pParam->base.reg_gen == USE_REG_ESP || pParam->base.reg_gen == USE_REG_EBP)
    243244                return USE_REG_SS;
    244245        }
     
    486487            {
    487488                pParamVal->flags |= PARAM_VAL8;
    488                 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     489                if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    489490            }
    490491            else
     
    492493            {
    493494                pParamVal->flags |= PARAM_VAL16;
    494                 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     495                if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    495496            }
    496497            else
     
    498499            {
    499500                pParamVal->flags |= PARAM_VAL32;
    500                 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     501                if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    501502            }
    502503            else
     
    504505            {
    505506                pParamVal->flags |= PARAM_VAL64;
    506                 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     507                if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    507508            }
    508509            else {
     
    581582            pParamVal->flags |= PARAM_VAL8;
    582583            pParamVal->size   = sizeof(uint8_t);
    583             if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     584            if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    584585        }
    585586        else
     
    588589            pParamVal->flags |= PARAM_VAL16;
    589590            pParamVal->size   = sizeof(uint16_t);
    590             if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     591            if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    591592        }
    592593        else
     
    595596            pParamVal->flags |= PARAM_VAL32;
    596597            pParamVal->size   = sizeof(uint32_t);
    597             if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     598            if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    598599        }
    599600        else
     
    602603            pParamVal->flags |= PARAM_VAL64;
    603604            pParamVal->size   = sizeof(uint64_t);
    604             if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     605            if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    605606        }
    606607        else
     
    698699        {
    699700            uint8_t *pu8Reg;
    700             if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen8, &pu8Reg)))
     701            if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen, &pu8Reg)))
    701702            {
    702703                *pcbSize = sizeof(uint8_t);
     
    709710        {
    710711            uint16_t *pu16Reg;
    711             if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen16, &pu16Reg)))
     712            if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen, &pu16Reg)))
    712713            {
    713714                *pcbSize = sizeof(uint16_t);
     
    720721        {
    721722            uint32_t *pu32Reg;
    722             if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen32, &pu32Reg)))
     723            if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen, &pu32Reg)))
    723724            {
    724725                *pcbSize = sizeof(uint32_t);
     
    731732        {
    732733            uint64_t *pu64Reg;
    733             if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen64, &pu64Reg)))
     734            if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen, &pu64Reg)))
    734735            {
    735736                *pcbSize = sizeof(uint64_t);
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