VirtualBox

Changeset 24848 in vbox


Ignore:
Timestamp:
Nov 22, 2009 1:29:32 AM (15 years ago)
Author:
vboxsync
Message:

x86.h/.mac,CPUM.cpp: made FTW a word again and made cpumR3InfoOne dump the whole FPU state.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/cpum.mac

    r20994 r24848  
    213213    ;/** Status word. */
    214214    .FSW            resw    1
    215     ;/** Tag word (it's a byte actually). */
    216     .FTW            resb    1
    217     .huh1           resb    1
     215    ;/** Tag word. */
     216    .FTW            resw    1
    218217    ;/** Opcode. */
    219218    .FOP            resw    1
  • trunk/include/VBox/x86.h

    r24625 r24848  
    18941894    /** Status word. */
    18951895    uint16_t    FSW;
    1896     /** Tag word (it's a byte actually). */
    1897     uint8_t     FTW;
    1898     uint8_t     huh1;
     1896    /** Tag word. (The upper byte is always zero.) */
     1897    uint16_t    FTW;
    18991898    /** Opcode. */
    19001899    uint16_t    FOP;
  • trunk/src/VBox/VMM/CPUM.cpp

    r24463 r24848  
    22712271
    22722272            pHlp->pfnPrintf(pHlp,
    2273                 "FPU:\n"
    2274                 "%sFCW=%04x %sFSW=%04x %sFTW=%02x\n"
    2275                 "%sres1=%02x %sFOP=%04x %sFPUIP=%08x %sCS=%04x %sRsvrd1=%04x\n"
    2276                 "%sFPUDP=%04x %sDS=%04x %sRsvrd2=%04x %sMXCSR=%08x %sMXCSR_MASK=%08x\n"
     2273                "%sFCW=%04x %sFSW=%04x %sFTW=%04x %sFOP=%04x %sMXCSR=%08x %sMXCSR_MASK=%08x\n"
     2274                "%sFPUIP=%08x %sCS=%04x %sRsvrd1=%04x  %sFPUDP=%08x %sDS=%04x %sRsvrd2=%04x\n"
    22772275                ,
    2278                 pszPrefix, pCtx->fpu.FCW, pszPrefix, pCtx->fpu.FSW, pszPrefix, pCtx->fpu.FTW,
    2279                 pszPrefix, pCtx->fpu.huh1, pszPrefix, pCtx->fpu.FOP, pszPrefix, pCtx->fpu.FPUIP, pszPrefix, pCtx->fpu.CS, pszPrefix, pCtx->fpu.Rsvrd1,
    2280                 pszPrefix, pCtx->fpu.FPUDP, pszPrefix, pCtx->fpu.DS, pszPrefix, pCtx->fpu.Rsrvd2,
    2281                 pszPrefix, pCtx->fpu.MXCSR, pszPrefix, pCtx->fpu.MXCSR_MASK);
     2276                pszPrefix, pCtx->fpu.FCW,   pszPrefix, pCtx->fpu.FSW, pszPrefix, pCtx->fpu.FTW, pszPrefix, pCtx->fpu.FOP,
     2277                pszPrefix, pCtx->fpu.MXCSR, pszPrefix, pCtx->fpu.MXCSR_MASK,
     2278                pszPrefix, pCtx->fpu.FPUIP, pszPrefix, pCtx->fpu.CS,  pszPrefix, pCtx->fpu.Rsvrd1,
     2279                pszPrefix, pCtx->fpu.FPUDP, pszPrefix, pCtx->fpu.DS,  pszPrefix, pCtx->fpu.Rsrvd2
     2280                );
     2281            unsigned iShift = (pCtx->fpu.FSW >> 11) & 7;
     2282            for (unsigned iST = 0; iST < RT_ELEMENTS(pCtx->fpu.aRegs); iST++)
     2283            {
     2284                unsigned iFPR        = (iST + iShift) % RT_ELEMENTS(pCtx->fpu.aRegs);
     2285                unsigned uTag        = pCtx->fpu.FTW & (1 << iFPR) ? 1 : 0;
     2286                char     chSign      = pCtx->fpu.aRegs[0].au16[4] & 0x8000 ? '-' : '+';
     2287                unsigned iInteger    = (unsigned)(pCtx->fpu.aRegs[0].au64[0] >> 63);
     2288                uint64_t u64Fraction = pCtx->fpu.aRegs[0].au64[0] & UINT64_C(0x7fffffffffffffff);
     2289                unsigned uExponent   = pCtx->fpu.aRegs[0].au16[5] & 0x7fff;
     2290                /** @todo This isn't entirenly correct and needs more work! */
     2291                pHlp->pfnPrintf(pHlp,
     2292                                "%sST(%u)=%sFPR%u={%04RX16'%08RX32'%08RX32} t%d %c%u.%022llu ^ %u",
     2293                                pszPrefix, iST, pszPrefix, iFPR,
     2294                                pCtx->fpu.aRegs[0].au16[4], pCtx->fpu.aRegs[0].au32[1], pCtx->fpu.aRegs[0].au32[0],
     2295                                uTag, chSign, iInteger, u64Fraction, uExponent);
     2296                if (pCtx->fpu.aRegs[0].au16[5] || pCtx->fpu.aRegs[0].au16[6] || pCtx->fpu.aRegs[0].au16[7])
     2297                    pHlp->pfnPrintf(pHlp, " res={%04RX16,%04RX16,%04RX16}\n",
     2298                                    pCtx->fpu.aRegs[0].au16[5], pCtx->fpu.aRegs[0].au16[6], pCtx->fpu.aRegs[0].au16[7]);
     2299                else
     2300                    pHlp->pfnPrintf(pHlp, "\n");
     2301            }
     2302            for (unsigned iXMM = 0; iXMM < RT_ELEMENTS(pCtx->fpu.aXMM); iXMM++)
     2303                pHlp->pfnPrintf(pHlp,
     2304                                iXMM & 1
     2305                                ? "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32\n"
     2306                                : "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32  ",
     2307                                pszPrefix, iXMM, iXMM < 10 ? " " : "",
     2308                                pCtx->fpu.aRegs[iXMM].au32[3],
     2309                                pCtx->fpu.aRegs[iXMM].au32[2],
     2310                                pCtx->fpu.aRegs[iXMM].au32[1],
     2311                                pCtx->fpu.aRegs[iXMM].au32[0]);
     2312            for (unsigned i = 0; i < RT_ELEMENTS(pCtx->fpu.au32RsrvdRest); i++)
     2313                if (pCtx->fpu.au32RsrvdRest[i])
     2314                    pHlp->pfnPrintf(pHlp, "%sRsrvdRest[i]=%RX32 (offset=%#x)\n",
     2315                                    pszPrefix, i, pCtx->fpu.au32RsrvdRest[i], RT_OFFSETOF(X86FXSTATE, au32RsrvdRest[i]) );
    22822316
    22832317            pHlp->pfnPrintf(pHlp,
    2284                 "MSR:\n"
    22852318                "%sEFER         =%016RX64\n"
    22862319                "%sPAT          =%016RX64\n"
  • trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp

    r24813 r24848  
    16971697    Log(("FPU:\n"
    16981698        "FCW=%04x FSW=%04x FTW=%02x\n"
    1699         "res1=%02x FOP=%04x FPUIP=%08x CS=%04x Rsvrd1=%04x\n"
     1699        "FOP=%04x FPUIP=%08x CS=%04x Rsvrd1=%04x\n"
    17001700        "FPUDP=%04x DS=%04x Rsvrd2=%04x MXCSR=%08x MXCSR_MASK=%08x\n"
    17011701        ,
    17021702        pCtx->fpu.FCW, pCtx->fpu.FSW, pCtx->fpu.FTW,
    1703         pCtx->fpu.huh1, pCtx->fpu.FOP, pCtx->fpu.FPUIP, pCtx->fpu.CS, pCtx->fpu.Rsvrd1,
     1703        pCtx->fpu.FOP, pCtx->fpu.FPUIP, pCtx->fpu.CS, pCtx->fpu.Rsvrd1,
    17041704        pCtx->fpu.FPUDP, pCtx->fpu.DS, pCtx->fpu.Rsrvd2,
    17051705        pCtx->fpu.MXCSR, pCtx->fpu.MXCSR_MASK));
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