VirtualBox

忽略:
時間撮記:
2008-4-21 下午02:29:54 (17 年 以前)
作者:
vboxsync
訊息:

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

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IOMAll.cpp

    r8155 r8234  
    4646 * @param   pParam              Pointer to parameter of instruction to proccess.
    4747 */
    48 static unsigned iomGCGetRegSize(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam)
     48static unsigned iomGetRegSize(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam)
    4949{
    5050    if (pParam->flags & (USE_BASE | USE_INDEX | USE_SCALE | USE_DISPLACEMENT8 | USE_DISPLACEMENT16 | USE_DISPLACEMENT32 | USE_IMMEDIATE8 | USE_IMMEDIATE16 | USE_IMMEDIATE32 | USE_IMMEDIATE16_SX8 | USE_IMMEDIATE32_SX8))
     
    5959    if (pParam->flags & USE_REG_GEN8)
    6060        return 1;
     61
     62    if (pParam->flags & USE_REG_GEN64)
     63        return 8;
    6164
    6265    if (pParam->flags & USE_REG_SEG)
     
    7780 * @param   pcbSize             Where to store the size of data (1, 2, 4).
    7881 */
    79 static bool iomGCGetRegImmData(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam, PCPUMCTXCORE pRegFrame, uint32_t *pu32Data, unsigned *pcbSize)
     82bool iomGetRegImmData(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam, PCPUMCTXCORE pRegFrame, uint32_t *pu32Data, unsigned *pcbSize)
    8083{
    8184    if (pParam->flags & (USE_BASE | USE_INDEX | USE_SCALE | USE_DISPLACEMENT8 | USE_DISPLACEMENT16 | USE_DISPLACEMENT32))
     
    8992    {
    9093        *pcbSize  = 4;
    91         DISFetchReg32(pRegFrame, pParam->base.reg_gen32, pu32Data);
     94        DISFetchReg32(pRegFrame, pParam->base.reg_gen, pu32Data);
    9295        return true;
    9396    }
     
    9699    {
    97100        *pcbSize  = 2;
    98         DISFetchReg16(pRegFrame, pParam->base.reg_gen16, (uint16_t *)pu32Data);
     101        DISFetchReg16(pRegFrame, pParam->base.reg_gen, (uint16_t *)pu32Data);
    99102        return true;
    100103    }
     
    103106    {
    104107        *pcbSize  = 1;
    105         DISFetchReg8(pRegFrame, pParam->base.reg_gen8, (uint8_t *)pu32Data);
     108        DISFetchReg8(pRegFrame, pParam->base.reg_gen, (uint8_t *)pu32Data);
     109        return true;
     110    }
     111
     112    if (pParam->flags & USE_REG_GEN64)
     113    {
     114        AssertFailed();
     115        *pcbSize  = 8;
     116        ///DISFetchReg64(pRegFrame, pParam->base.reg_gen, pu32Data);
     117        return true;
     118    }
     119
     120    if (pParam->flags & (USE_IMMEDIATE64))
     121    {
     122        AssertFailed();
     123        *pcbSize  = 8;
     124        *pu32Data = (uint32_t)pParam->parval;
    106125        return true;
    107126    }
     
    110129    {
    111130        *pcbSize  = 4;
    112         *pu32Data = (uint32_t)pParam->parval;
     131        //*pu32Data = (uint32_t)pParam->parval;
    113132        return true;
    114133    }
     
    135154    } /* Else - error. */
    136155
     156    AssertFailed();
    137157    *pcbSize  = 0;
    138158    *pu32Data = 0;
     
    151171 * @param   u32Data             8/16/32 bit data to store.
    152172 */
    153 static bool iomGCSaveDataToReg(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam, PCPUMCTXCORE pRegFrame, unsigned u32Data)
     173bool iomSaveDataToReg(PDISCPUSTATE pCpu, PCOP_PARAMETER pParam, PCPUMCTXCORE pRegFrame, unsigned u32Data)
    154174{
    155175    if (pParam->flags & (USE_BASE | USE_INDEX | USE_SCALE | USE_DISPLACEMENT8 | USE_DISPLACEMENT16 | USE_DISPLACEMENT32 | USE_IMMEDIATE8 | USE_IMMEDIATE16 | USE_IMMEDIATE32 | USE_IMMEDIATE32_SX8 | USE_IMMEDIATE16_SX8))
     
    160180    if (pParam->flags & USE_REG_GEN32)
    161181    {
    162         DISWriteReg32(pRegFrame, pParam->base.reg_gen32, u32Data);
     182        DISWriteReg32(pRegFrame, pParam->base.reg_gen, u32Data);
    163183        return true;
    164184    }
     
    166186    if (pParam->flags & USE_REG_GEN16)
    167187    {
    168         DISWriteReg16(pRegFrame, pParam->base.reg_gen16, (uint16_t)u32Data);
     188        DISWriteReg16(pRegFrame, pParam->base.reg_gen, (uint16_t)u32Data);
    169189        return true;
    170190    }
     
    172192    if (pParam->flags & USE_REG_GEN8)
    173193    {
    174         DISWriteReg8(pRegFrame, pParam->base.reg_gen8, (uint8_t)u32Data);
     194        DISWriteReg8(pRegFrame, pParam->base.reg_gen, (uint8_t)u32Data);
    175195        return true;
    176196    }
     
    189209 * Internal - statistics only.
    190210 */
    191 DECLINLINE(void) iomGCMMIOStatLength(PVM pVM, unsigned cb)
     211DECLINLINE(void) iomMMIOStatLength(PVM pVM, unsigned cb)
    192212{
    193213#ifdef VBOX_WITH_STATISTICS
     
    857877    uint32_t    uPort = 0;
    858878    unsigned    cbSize = 0;
    859     bool fRc = iomGCGetRegImmData(pCpu, &pCpu->param2, pRegFrame, &uPort, &cbSize);
     879    bool fRc = iomGetRegImmData(pCpu, &pCpu->param2, pRegFrame, &uPort, &cbSize);
    860880    AssertMsg(fRc, ("Failed to get reg/imm port number!\n")); NOREF(fRc);
    861881
    862     cbSize = iomGCGetRegSize(pCpu, &pCpu->param1);
     882    cbSize = iomGetRegSize(pCpu, &pCpu->param1);
    863883    Assert(cbSize > 0);
    864884    int rc = IOMInterpretCheckPortIOAccess(pVM, pRegFrame, uPort, cbSize);
     
    875895             * Store the result in the AL|AX|EAX register.
    876896             */
    877             fRc = iomGCSaveDataToReg(pCpu, &pCpu->param1, pRegFrame, u32Data);
     897            fRc = iomSaveDataToReg(pCpu, &pCpu->param1, pRegFrame, u32Data);
    878898            AssertMsg(fRc, ("Failed to store register value!\n")); NOREF(fRc);
    879899        }
     
    916936    uint32_t    uPort = 0;
    917937    unsigned    cbSize = 0;
    918     bool fRc = iomGCGetRegImmData(pCpu, &pCpu->param1, pRegFrame, &uPort, &cbSize);
     938    bool fRc = iomGetRegImmData(pCpu, &pCpu->param1, pRegFrame, &uPort, &cbSize);
    919939    AssertMsg(fRc, ("Failed to get reg/imm port number!\n")); NOREF(fRc);
    920940
     
    923943    {
    924944        uint32_t    u32Data = 0;
    925         fRc = iomGCGetRegImmData(pCpu, &pCpu->param2, pRegFrame, &u32Data, &cbSize);
     945        fRc = iomGetRegImmData(pCpu, &pCpu->param2, pRegFrame, &u32Data, &cbSize);
    926946        AssertMsg(fRc, ("Failed to get reg value!\n")); NOREF(fRc);
    927947
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette