VirtualBox

Changeset 101305 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Sep 29, 2023 1:18:28 AM (15 months ago)
Author:
vboxsync
Message:

VMM/IEM: Covert zero arg count defer-CImpl instruction emulations as well. Some build fixes for arm. bugref:10371

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r101304 r101305  
    19221922    return iemNativeEmitCImplCall3(pReNative, off, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a_cbInstr, a0, a1, a2)
    19231923
     1924/*
     1925 * Builtin functions.
     1926 */
     1927
     1928/**
     1929 * Built-in function that calls a C-implemention function taking zero arguments.
     1930 */
     1931static IEM_DECL_IEMNATIVERECOMPFUNC_DEF(iemNativeRecompFunc_BltIn_DeferToCImpl0)
     1932{
     1933    PFNIEMCIMPL0 const pfnCImpl = (PFNIEMCIMPL0)(uintptr_t)pCallEntry->auParams[0];
     1934    uint8_t const      cbInstr  = (uint8_t)pCallEntry->auParams[1];
     1935    return iemNativeEmitCImplCall(pReNative, off, pCallEntry->idxInstr, (uintptr_t)pfnCImpl, cbInstr, 0, 0, 0, 0);
     1936}
     1937
    19241938
    19251939
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r101275 r101305  
    16021602        ];
    16031603
    1604     ## List of built-in threaded functions with user argument counts.
     1604    ## List of built-in threaded functions with user argument counts and
     1605    ## whether it has a native recompiler implementation.
    16051606    katBltIns = (
    1606         ( 'DeferToCImpl0',                                      2 ),
    1607         ( 'CheckIrq',                                           0 ),
    1608         ( 'CheckMode',                                          1 ),
    1609         ( 'CheckHwInstrBps',                                    0 ),
    1610         ( 'CheckCsLim',                                         1 ),
    1611 
    1612         ( 'CheckCsLimAndOpcodes',                               3 ),
    1613         ( 'CheckOpcodes',                                       3 ),
    1614         ( 'CheckOpcodesConsiderCsLim',                          3 ),
    1615 
    1616         ( 'CheckCsLimAndPcAndOpcodes',                          3 ),
    1617         ( 'CheckPcAndOpcodes',                                  3 ),
    1618         ( 'CheckPcAndOpcodesConsiderCsLim',                     3 ),
    1619 
    1620         ( 'CheckCsLimAndOpcodesAcrossPageLoadingTlb',           3 ),
    1621         ( 'CheckOpcodesAcrossPageLoadingTlb',                   3 ),
    1622         ( 'CheckOpcodesAcrossPageLoadingTlbConsiderCsLim',      2 ),
    1623 
    1624         ( 'CheckCsLimAndOpcodesLoadingTlb',                     3 ),
    1625         ( 'CheckOpcodesLoadingTlb',                             3 ),
    1626         ( 'CheckOpcodesLoadingTlbConsiderCsLim',                3 ),
    1627 
    1628         ( 'CheckCsLimAndOpcodesOnNextPageLoadingTlb',           2 ),
    1629         ( 'CheckOpcodesOnNextPageLoadingTlb',                   2 ),
    1630         ( 'CheckOpcodesOnNextPageLoadingTlbConsiderCsLim',      2 ),
    1631 
    1632         ( 'CheckCsLimAndOpcodesOnNewPageLoadingTlb',            2 ),
    1633         ( 'CheckOpcodesOnNewPageLoadingTlb',                    2 ),
    1634         ( 'CheckOpcodesOnNewPageLoadingTlbConsiderCsLim',       2 ),
     1607        ( 'DeferToCImpl0',                                      2, True ),
     1608        ( 'CheckIrq',                                           0, False ),
     1609        ( 'CheckMode',                                          1, False ),
     1610        ( 'CheckHwInstrBps',                                    0, False ),
     1611        ( 'CheckCsLim',                                         1, False ),
     1612
     1613        ( 'CheckCsLimAndOpcodes',                               3, False ),
     1614        ( 'CheckOpcodes',                                       3, False ),
     1615        ( 'CheckOpcodesConsiderCsLim',                          3, False ),
     1616
     1617        ( 'CheckCsLimAndPcAndOpcodes',                          3, False ),
     1618        ( 'CheckPcAndOpcodes',                                  3, False ),
     1619        ( 'CheckPcAndOpcodesConsiderCsLim',                     3, False ),
     1620
     1621        ( 'CheckCsLimAndOpcodesAcrossPageLoadingTlb',           3, False ),
     1622        ( 'CheckOpcodesAcrossPageLoadingTlb',                   3, False ),
     1623        ( 'CheckOpcodesAcrossPageLoadingTlbConsiderCsLim',      2, False ),
     1624
     1625        ( 'CheckCsLimAndOpcodesLoadingTlb',                     3, False ),
     1626        ( 'CheckOpcodesLoadingTlb',                             3, False ),
     1627        ( 'CheckOpcodesLoadingTlbConsiderCsLim',                3, False ),
     1628
     1629        ( 'CheckCsLimAndOpcodesOnNextPageLoadingTlb',           2, False ),
     1630        ( 'CheckOpcodesOnNextPageLoadingTlb',                   2, False ),
     1631        ( 'CheckOpcodesOnNextPageLoadingTlbConsiderCsLim',      2, False ),
     1632
     1633        ( 'CheckCsLimAndOpcodesOnNewPageLoadingTlb',            2, False ),
     1634        ( 'CheckOpcodesOnNewPageLoadingTlb',                    2, False ),
     1635        ( 'CheckOpcodesOnNewPageLoadingTlbConsiderCsLim',       2, False ),
    16351636    );
    16361637
     
    16531654            '     */',
    16541655        ];
    1655         asLines += ['    kIemThreadedFunc_BltIn_%s,' % (sFuncNm,) for sFuncNm, _ in self.katBltIns];
     1656        asLines += ['    kIemThreadedFunc_BltIn_%s,' % (sFuncNm,) for sFuncNm, _, _ in self.katBltIns];
    16561657
    16571658        iThreadedFunction = 1 + len(self.katBltIns);
     
    18271828                '     */',
    18281829            ));
    1829         for sFuncNm, cArgs in self.katBltIns:
     1830        for sFuncNm, cArgs, _ in self.katBltIns:
    18301831            asFuncTable.append('    iemThreadedFunc_BltIn_%s,' % (sFuncNm,));
    18311832            asNameTable.append('    "BltIn_%s",' % (sFuncNm,));
     
    19631964                    + '     */\n'
    19641965                    );
    1965         for sFuncNm, _ in self.katBltIns:
    1966             oOut.write('    NULL, /*BltIn_%s*/\n' % (sFuncNm,))
     1966        for sFuncNm, _, fHaveRecompFunc in self.katBltIns:
     1967            if fHaveRecompFunc:
     1968                oOut.write('    iemNativeRecompFunc_BltIn_%s,\n' % (sFuncNm,))
     1969            else:
     1970                oOut.write('    NULL, /*BltIn_%s*/\n' % (sFuncNm,))
    19671971
    19681972        iThreadedFunction = 1 + len(self.katBltIns);
  • trunk/src/VBox/VMM/include/IEMN8veRecompiler.h

    r101304 r101305  
    658658        AssertReturn(pu32CodeBuf, UINT32_MAX);
    659659        pu32CodeBuf[off++] = Armv8A64MkInstrStLdRUOff(kArmv8A64InstrLdStType_St_Dword, iGprSrc,
    660                                                       ARMV8_A64_BP, (uint32_t)offDisp / 8);
    661     }
    662     else if (offDisp >= -256 offDisp <= 256)
     660                                                      ARMV8_A64_REG_BP, (uint32_t)offDisp / 8);
     661    }
     662    else if (offDisp >= -256 && offDisp <= 256)
    663663    {
    664664        /* stur w/ signed imm9 (unscaled) */
    665665        uint32_t *pu32CodeBuf = iemNativeInstrBufEnsure(pReNative, off, 1);
    666666        AssertReturn(pu32CodeBuf, UINT32_MAX);
    667         pu32CodeBuf[off++] = Armv8A64MkInstrSturLdur(kArmv8A64InstrLdStType_St_Dword, iGprSrc, ARMV8_A64_BP, offDisp);
     667        pu32CodeBuf[off++] = Armv8A64MkInstrSturLdur(kArmv8A64InstrLdStType_St_Dword, iGprSrc, ARMV8_A64_REG_BP, offDisp);
    668668    }
    669669    else
     
    673673        uint32_t *pu32CodeBuf = iemNativeInstrBufEnsure(pReNative, off, 1);
    674674        AssertReturn(pu32CodeBuf, UINT32_MAX);
    675         pu32CodeBuf[off++] = Armv8A64MkInstrStLdRegIdx(kArmv8A64InstrLdStType_St_Dword, iGprSrc, ARMV8_A64_BP,
     675        pu32CodeBuf[off++] = Armv8A64MkInstrStLdRegIdx(kArmv8A64InstrLdStType_St_Dword, iGprSrc, ARMV8_A64_REG_BP,
    676676                                                       IEMNATIVE_REG_FIXDE_TMP0, kArmv8A64InstrLdStExtend_Sxtw);
    677677    }
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