VirtualBox

Ignore:
Timestamp:
Mar 11, 2023 1:59:59 AM (22 months ago)
Author:
vboxsync
Message:

VMM/IEM: More work on processing MC blocks. bugref:10369

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r98905 r98910  
    17481748    Statement in a microcode block.
    17491749    """
    1750 
    17511750    def __init__(self, sName, asParams):
    17521751        self.sName    = sName;     ##< 'IEM_MC_XXX' or 'C++'.
     
    17721771
    17731772class McStmtCond(McStmt):
    1774     """ Base class for conditional statements (IEM_MC_IF_XXX). """
    1775 
     1773    """
     1774    Base class for conditional statements (IEM_MC_IF_XXX).
     1775    """
    17761776    def __init__(self, sName, asParams):
    17771777        McStmt.__init__(self, sName, asParams);
     
    18051805        assert sRefType in ('none', 'local');
    18061806
     1807
     1808class McStmtCall(McStmt):
     1809    """ IEM_MC_CALL_* """
     1810    def __init__(self, sName, asParams, iFnParam, iRcNameParam = -1):
     1811        McStmt.__init__(self, sName, asParams);
     1812        self.idxFn       = iFnParam;
     1813        self.idxParams   = iFnParam + 1;
     1814        self.sFn         = asParams[iFnParam];
     1815        self.iRcName     = None if iRcNameParam < 0 else asParams[iRcNameParam];
     1816
    18071817class McCppGeneric(McStmt):
    18081818    """
    18091819    Generic C++/C statement.
    18101820    """
    1811 
    18121821    def __init__(self, sCode, fDecode, sName = 'C++'):
    18131822        McStmt.__init__(self, sName, [sCode,]);
     
    18471856    C++/C Preprocessor directive.
    18481857    """
    1849 
    18501858    def __init__(self, sCode):
    18511859        McCppGeneric.__init__(self, sCode, False, sName = 'C++/preproc');
     
    19581966        oSelf.checkStmtParamCount(sName, asParams, 3);
    19591967        return McStmtVar(sName, asParams, asParams[0], asParams[1], sConstValue = asParams[2]);
     1968
     1969    @staticmethod
     1970    def parseMcCallAImpl(oSelf, sName, asParams):
     1971        """ IEM_MC_CALL_AIMPL_3|4 """
     1972        cArgs = int(sName[-1]);
     1973        oSelf.checkStmtParamCount(sName, asParams, 2 + cArgs);
     1974        return McStmtCall(sName, asParams, 1, 0);
     1975
     1976    @staticmethod
     1977    def parseMcCallVoidAImpl(oSelf, sName, asParams):
     1978        """ IEM_MC_CALL_VOID_AIMPL_2|3 """
     1979        cArgs = int(sName[-1]);
     1980        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     1981        return McStmtCall(sName, asParams, 0);
     1982
     1983    @staticmethod
     1984    def parseMcCallAvxAImpl(oSelf, sName, asParams):
     1985        """ IEM_MC_CALL_AVX_AIMPL_2|3 """
     1986        cArgs = int(sName[-1]);
     1987        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     1988        return McStmtCall(sName, asParams, 0);
     1989
     1990    @staticmethod
     1991    def parseMcCallFpuAImpl(oSelf, sName, asParams):
     1992        """ IEM_MC_CALL_FPU_AIMPL_1|2|3 """
     1993        cArgs = int(sName[-1]);
     1994        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     1995        return McStmtCall(sName, asParams, 0);
     1996
     1997    @staticmethod
     1998    def parseMcCallMmxAImpl(oSelf, sName, asParams):
     1999        """ IEM_MC_CALL_MMX_AIMPL_2|3 """
     2000        cArgs = int(sName[-1]);
     2001        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     2002        return McStmtCall(sName, asParams, 0);
     2003
     2004    @staticmethod
     2005    def parseMcCallSseAImpl(oSelf, sName, asParams):
     2006        """ IEM_MC_CALL_SSE_AIMPL_2|3 """
     2007        cArgs = int(sName[-1]);
     2008        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     2009        return McStmtCall(sName, asParams, 0);
     2010
     2011    @staticmethod
     2012    def parseMcCallCImpl(oSelf, sName, asParams):
     2013        """ IEM_MC_CALL_CIMPL_0|1|2|3|4|5 """
     2014        cArgs = int(sName[-1]);
     2015        oSelf.checkStmtParamCount(sName, asParams, 1 + cArgs);
     2016        return McStmtCall(sName, asParams, 0);
    19602017
    19612018    @staticmethod
     
    22622319                offNextEnd = sRawCode.find(';', offEnd + 1);
    22632320                fDecode    = (   sRawCode.find('IEM_OPCODE_', off, max(offEnd, offNextEnd)) >= 0
    2264                               or sRawCode.find('IEMOP_HLP_DONE_', off, max(offEnd, offNextEnd)) >= 0);
     2321                              or sRawCode.find('IEMOP_HLP_DONE_', off, max(offEnd, offNextEnd)) >= 0
     2322                              or sRawCode.find('IEMOP_HLP_DECODED_', off, offEnd) >= 0
     2323                              or sRawCode.find('IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE', off, offEnd) >= 0
     2324                           );
    22652325
    22662326                if not oMatch:
     
    23742434    'IEM_MC_BSWAP_LOCAL_U64':                                    McBlock.parseMcGeneric,
    23752435    'IEM_MC_CALC_RM_EFF_ADDR':                                   McBlock.parseMcGeneric,
    2376     'IEM_MC_CALL_AIMPL_3':                                       McBlock.parseMcGeneric,
    2377     'IEM_MC_CALL_AIMPL_4':                                       McBlock.parseMcGeneric,
    2378     'IEM_MC_CALL_AVX_AIMPL_2':                                   McBlock.parseMcGeneric,
    2379     'IEM_MC_CALL_AVX_AIMPL_3':                                   McBlock.parseMcGeneric,
    2380     'IEM_MC_CALL_CIMPL_0':                                       McBlock.parseMcGeneric,
    2381     'IEM_MC_CALL_CIMPL_1':                                       McBlock.parseMcGeneric,
    2382     'IEM_MC_CALL_CIMPL_2':                                       McBlock.parseMcGeneric,
    2383     'IEM_MC_CALL_CIMPL_3':                                       McBlock.parseMcGeneric,
    2384     'IEM_MC_CALL_CIMPL_4':                                       McBlock.parseMcGeneric,
    2385     'IEM_MC_CALL_CIMPL_5':                                       McBlock.parseMcGeneric,
    2386     'IEM_MC_CALL_FPU_AIMPL_1':                                   McBlock.parseMcGeneric,
    2387     'IEM_MC_CALL_FPU_AIMPL_2':                                   McBlock.parseMcGeneric,
    2388     'IEM_MC_CALL_FPU_AIMPL_3':                                   McBlock.parseMcGeneric,
    2389     'IEM_MC_CALL_MMX_AIMPL_2':                                   McBlock.parseMcGeneric,
    2390     'IEM_MC_CALL_MMX_AIMPL_3':                                   McBlock.parseMcGeneric,
    2391     'IEM_MC_CALL_SSE_AIMPL_2':                                   McBlock.parseMcGeneric,
    2392     'IEM_MC_CALL_SSE_AIMPL_3':                                   McBlock.parseMcGeneric,
    2393     'IEM_MC_CALL_VOID_AIMPL_0':                                  McBlock.parseMcGeneric,
    2394     'IEM_MC_CALL_VOID_AIMPL_1':                                  McBlock.parseMcGeneric,
    2395     'IEM_MC_CALL_VOID_AIMPL_2':                                  McBlock.parseMcGeneric,
    2396     'IEM_MC_CALL_VOID_AIMPL_3':                                  McBlock.parseMcGeneric,
    2397     'IEM_MC_CALL_VOID_AIMPL_4':                                  McBlock.parseMcGeneric,
     2436    'IEM_MC_CALL_AIMPL_3':                                       McBlock.parseMcCallAImpl,
     2437    'IEM_MC_CALL_AIMPL_4':                                       McBlock.parseMcCallAImpl,
     2438    'IEM_MC_CALL_AVX_AIMPL_2':                                   McBlock.parseMcCallAvxAImpl,
     2439    'IEM_MC_CALL_AVX_AIMPL_3':                                   McBlock.parseMcCallAvxAImpl,
     2440    'IEM_MC_CALL_CIMPL_0':                                       McBlock.parseMcCallCImpl,
     2441    'IEM_MC_CALL_CIMPL_1':                                       McBlock.parseMcCallCImpl,
     2442    'IEM_MC_CALL_CIMPL_2':                                       McBlock.parseMcCallCImpl,
     2443    'IEM_MC_CALL_CIMPL_3':                                       McBlock.parseMcCallCImpl,
     2444    'IEM_MC_CALL_CIMPL_4':                                       McBlock.parseMcCallCImpl,
     2445    'IEM_MC_CALL_CIMPL_5':                                       McBlock.parseMcCallCImpl,
     2446    'IEM_MC_CALL_FPU_AIMPL_1':                                   McBlock.parseMcCallFpuAImpl,
     2447    'IEM_MC_CALL_FPU_AIMPL_2':                                   McBlock.parseMcCallFpuAImpl,
     2448    'IEM_MC_CALL_FPU_AIMPL_3':                                   McBlock.parseMcCallFpuAImpl,
     2449    'IEM_MC_CALL_MMX_AIMPL_2':                                   McBlock.parseMcCallMmxAImpl,
     2450    'IEM_MC_CALL_MMX_AIMPL_3':                                   McBlock.parseMcCallMmxAImpl,
     2451    'IEM_MC_CALL_SSE_AIMPL_2':                                   McBlock.parseMcCallSseAImpl,
     2452    'IEM_MC_CALL_SSE_AIMPL_3':                                   McBlock.parseMcCallSseAImpl,
     2453    'IEM_MC_CALL_VOID_AIMPL_0':                                  McBlock.parseMcCallVoidAImpl,
     2454    'IEM_MC_CALL_VOID_AIMPL_1':                                  McBlock.parseMcCallVoidAImpl,
     2455    'IEM_MC_CALL_VOID_AIMPL_2':                                  McBlock.parseMcCallVoidAImpl,
     2456    'IEM_MC_CALL_VOID_AIMPL_3':                                  McBlock.parseMcCallVoidAImpl,
     2457    'IEM_MC_CALL_VOID_AIMPL_4':                                  McBlock.parseMcCallVoidAImpl,
    23982458    'IEM_MC_CLEAR_EFL_BIT':                                      McBlock.parseMcGeneric,
    23992459    'IEM_MC_CLEAR_FSW_EX':                                       McBlock.parseMcGeneric,
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