VirtualBox

Changeset 103542 in vbox


Ignore:
Timestamp:
Feb 23, 2024 12:26:32 AM (7 months ago)
Author:
vboxsync
Message:

VMM/IEM: More helpful way to make the MC block names unique. bugref:10370

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

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

    r103256 r103542  
    15051505        ## @}
    15061506
     1507        ## All the MC blocks associated with this instruction.
     1508        self.aoMcBlocks     = []        # type: List[McBlock]
     1509
    15071510    def toString(self, fRepr = False):
    15081511        """ Turn object into a string. """
     
    18671870                    return oHit;
    18681871        return None;
     1872
     1873    @staticmethod
     1874    def countStmtsByName(aoStmts, dNames, dRet):
     1875        """
     1876        Searches the given list of statements for the names in the dictionary,
     1877        adding each found to dRet with an occurnece count.
     1878
     1879        return total number of hits;
     1880        """
     1881        cHits = 0;
     1882        for oStmt in aoStmts:
     1883            if oStmt.sName in dNames:
     1884                dRet[oStmt.sName] = dRet.get(oStmt.sName, 0) + 1;
     1885                cHits += 1;
     1886            if isinstance(oStmt, McStmtCond):
     1887                cHits += McStmt.countStmtsByName(oStmt.aoIfBranch,   dNames, dRet);
     1888                cHits += McStmt.countStmtsByName(oStmt.aoElseBranch, dNames, dRet);
     1889        return cHits;
    18691890
    18701891    def isCppStmt(self):
     
    53645385            self.raiseError(oXcpt.args[0]);
    53655386
     5387        if self.oCurMcBlock.oInstruction:
     5388            self.oCurMcBlock.oInstruction.aoMcBlocks.append(self.oCurMcBlock);
    53665389        self.iMcBlockInFunc += 1;
    53675390        return True;
     
    55285551
    55295552        g_aoMcBlocks.append(oMcBlock);
     5553        if oMcBlock.oInstruction:
     5554            oMcBlock.oInstruction.aoMcBlocks.append(oMcBlock);
    55305555        self.cTotalMcBlocks += 1;
    55315556        self.iMcBlockInFunc += 1;
     
    60616086
    60626087# Some sanity checking.
    6063 for sClass, dLists in SimpleParser.kdEFlagsClasses.items():
    6064     for sAttrib, asFlags in dLists.items():
    6065         for sFlag in asFlags:
    6066             assert sFlag in g_kdEFlagsMnemonics, 'sClass=%s sAttrib=%s sFlag=%s' % (sClass, sAttrib, sFlag,);
     6088def __sanityCheckEFlagsClasses():
     6089    for sClass, dLists in SimpleParser.kdEFlagsClasses.items():
     6090        for sAttrib, asFlags in dLists.items():
     6091            for sFlag in asFlags:
     6092                assert sFlag in g_kdEFlagsMnemonics, 'sClass=%s sAttrib=%s sFlag=%s' % (sClass, sAttrib, sFlag,);
     6093__sanityCheckEFlagsClasses();
    60676094
    60686095## The parsed content of IEMAllInstCommonBodyMacros.h.
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r103404 r103542  
    622622        if sName.startswith('iemOp_'):
    623623            sName = sName[len('iemOp_'):];
    624         if self.oParent.oMcBlock.iInFunction == 0:
    625             return 'kIemThreadedFunc_%s%s' % ( sName, self.sVariation, );
    626         return 'kIemThreadedFunc_%s_%s%s' % ( sName, self.oParent.oMcBlock.iInFunction, self.sVariation, );
     624        return 'kIemThreadedFunc_%s%s%s' % ( sName, self.oParent.sSubName, self.sVariation, );
    627625
    628626    def getThreadedFunctionName(self):
     
    630628        if sName.startswith('iemOp_'):
    631629            sName = sName[len('iemOp_'):];
    632         if self.oParent.oMcBlock.iInFunction == 0:
    633             return 'iemThreadedFunc_%s%s' % ( sName, self.sVariation, );
    634         return 'iemThreadedFunc_%s_%s%s' % ( sName, self.oParent.oMcBlock.iInFunction, self.sVariation, );
     630        return 'iemThreadedFunc_%s%s%s' % ( sName, self.oParent.sSubName, self.sVariation, );
    635631
    636632    def getNativeFunctionName(self):
     
    644640        if sName.startswith('iemOp_'):
    645641            sName = sName[len('iemOp_'):];
    646         if self.oParent.oMcBlock.iInFunction == 0:
    647             return '%s%s' % ( sName, self.sVariation, );
    648         return '%s_%s%s' % ( sName, self.oParent.oMcBlock.iInFunction, self.sVariation, );
     642        return '%s%s%s' % ( sName, self.oParent.sSubName, self.sVariation, );
    649643
    650644    def getThreadedFunctionStatisticsName(self):
     
    666660            sVarNm = 'DeferToCImpl';
    667661
    668         if self.oParent.oMcBlock.iInFunction == 0:
    669             return '%s/%s' % ( sVarNm, sName );
    670         return '%s/%s_%s' % ( sVarNm, sName, self.oParent.oMcBlock.iInFunction, );
     662        return '%s/%s%s' % ( sVarNm, sName, self.oParent.sSubName );
    671663
    672664    def isWithFlagsCheckingAndClearingVariation(self):
     
    15561548        ## and those determined by analyzeCodeOperation().
    15571549        self.dsCImplFlags   = {}            # type: Dict[str, bool]
     1550        ## The unique sub-name for this threaded function.
     1551        self.sSubName  = '';
     1552        #if oMcBlock.iInFunction > 0 or (oMcBlock.oInstruction and len(oMcBlock.oInstruction.aoMcBlocks) > 1):
     1553        #    self.sSubName  = '_%s' % (oMcBlock.iInFunction);
    15581554
    15591555    @staticmethod
     
    15881584        """ Emits a warning. """
    15891585        print('%s:%s: warning: %s' % (self.oMcBlock.sSrcFile, self.oMcBlock.iBeginLine, sMessage, ));
     1586
     1587    ## Used by analyzeAndAnnotateName for memory MC blocks.
     1588    kdAnnotateNameMemStmts = {
     1589        'IEM_MC_FETCH_MEM16_U8':                    '__mem8',
     1590        'IEM_MC_FETCH_MEM32_U8':                    '__mem8',
     1591        'IEM_MC_FETCH_MEM_D80':                     '__mem80',
     1592        'IEM_MC_FETCH_MEM_I16':                     '__mem16',
     1593        'IEM_MC_FETCH_MEM_I32':                     '__mem32',
     1594        'IEM_MC_FETCH_MEM_I64':                     '__mem64',
     1595        'IEM_MC_FETCH_MEM_R32':                     '__mem32',
     1596        'IEM_MC_FETCH_MEM_R64':                     '__mem64',
     1597        'IEM_MC_FETCH_MEM_R80':                     '__mem80',
     1598        'IEM_MC_FETCH_MEM_U128':                    '__mem128',
     1599        'IEM_MC_FETCH_MEM_U128_ALIGN_SSE':          '__mem128',
     1600        'IEM_MC_FETCH_MEM_U128_NO_AC':              '__mem128',
     1601        'IEM_MC_FETCH_MEM_U16':                     '__mem16',
     1602        'IEM_MC_FETCH_MEM_U16_DISP':                '__mem16',
     1603        'IEM_MC_FETCH_MEM_U16_SX_U32':              '__mem16sx32',
     1604        'IEM_MC_FETCH_MEM_U16_SX_U64':              '__mem16sx64',
     1605        'IEM_MC_FETCH_MEM_U16_ZX_U32':              '__mem16zx32',
     1606        'IEM_MC_FETCH_MEM_U16_ZX_U64':              '__mem16zx64',
     1607        'IEM_MC_FETCH_MEM_U256':                    '__mem256',
     1608        'IEM_MC_FETCH_MEM_U256_ALIGN_AVX':          '__mem256',
     1609        'IEM_MC_FETCH_MEM_U256_NO_AC':              '__mem256',
     1610        'IEM_MC_FETCH_MEM_U32':                     '__mem32',
     1611        'IEM_MC_FETCH_MEM_U32_DISP':                '__mem32',
     1612        'IEM_MC_FETCH_MEM_U32_SX_U64':              '__mem32sx64',
     1613        'IEM_MC_FETCH_MEM_U32_ZX_U64':              '__mem32zx64',
     1614        'IEM_MC_FETCH_MEM_U64':                     '__mem64',
     1615        'IEM_MC_FETCH_MEM_U64_ALIGN_U128':          '__mem64',
     1616        'IEM_MC_FETCH_MEM_U64_DISP':                '__mem64',
     1617        'IEM_MC_FETCH_MEM_U8':                      '__mem8',
     1618        'IEM_MC_FETCH_MEM_U8_DISP':                 '__mem8',
     1619        'IEM_MC_FETCH_MEM_U8_SX_U16':               '__mem8sx16',
     1620        'IEM_MC_FETCH_MEM_U8_SX_U32':               '__mem8sx32',
     1621        'IEM_MC_FETCH_MEM_U8_SX_U64':               '__mem8sx64',
     1622        'IEM_MC_FETCH_MEM_U8_ZX_U16':               '__mem8zx16',
     1623        'IEM_MC_FETCH_MEM_U8_ZX_U32':               '__mem8zx32',
     1624        'IEM_MC_FETCH_MEM_U8_ZX_U64':               '__mem8zx64',
     1625        'IEM_MC_FETCH_MEM_XMM':                     '__mem128',
     1626        'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE':           '__mem128',
     1627        'IEM_MC_FETCH_MEM_XMM_NO_AC':               '__mem128',
     1628        'IEM_MC_FETCH_MEM_XMM_U32':                 '__mem32',
     1629        'IEM_MC_FETCH_MEM_XMM_U64':                 '__mem64',
     1630        'IEM_MC_FETCH_MEM_U128_AND_XREG_U128':      '__mem128',
     1631        'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE_AND_XREG_XMM': '__mem128',
     1632        'IEM_MC_FETCH_MEM_XMM_U32_AND_XREG_XMM':    '__mem32',
     1633        'IEM_MC_FETCH_MEM_XMM_U64_AND_XREG_XMM':    '__mem64',
     1634        'IEM_MC_FETCH_MEM_U128_AND_XREG_U128_AND_RAX_RDX_U64': '__mem128',
     1635        'IEM_MC_FETCH_MEM_U128_AND_XREG_U128_AND_EAX_EDX_U32_SX_U64': '__mem128',
     1636
     1637        'IEM_MC_STORE_MEM_I16_CONST_BY_REF':        '__mem16',
     1638        'IEM_MC_STORE_MEM_I32_CONST_BY_REF':        '__mem32',
     1639        'IEM_MC_STORE_MEM_I64_CONST_BY_REF':        '__mem64',
     1640        'IEM_MC_STORE_MEM_I8_CONST_BY_REF':         '__mem8',
     1641        'IEM_MC_STORE_MEM_INDEF_D80_BY_REF':        '__mem80',
     1642        'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF':     '__mem32',
     1643        'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF':     '__mem64',
     1644        'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF':     '__mem80',
     1645        'IEM_MC_STORE_MEM_U128':                    '__mem128',
     1646        'IEM_MC_STORE_MEM_U128_ALIGN_SSE':          '__mem128',
     1647        'IEM_MC_STORE_MEM_U128_NO_AC':              '__mem128',
     1648        'IEM_MC_STORE_MEM_U16':                     '__mem16',
     1649        'IEM_MC_STORE_MEM_U16_CONST':               '__mem16',
     1650        'IEM_MC_STORE_MEM_U256':                    '__mem256',
     1651        'IEM_MC_STORE_MEM_U256_ALIGN_AVX':          '__mem256',
     1652        'IEM_MC_STORE_MEM_U256_NO_AC':              '__mem256',
     1653        'IEM_MC_STORE_MEM_U32':                     '__mem32',
     1654        'IEM_MC_STORE_MEM_U32_CONST':               '__mem32',
     1655        'IEM_MC_STORE_MEM_U64':                     '__mem64',
     1656        'IEM_MC_STORE_MEM_U64_CONST':               '__mem64',
     1657        'IEM_MC_STORE_MEM_U8':                      '__mem8',
     1658        'IEM_MC_STORE_MEM_U8_CONST':                '__mem8',
     1659
     1660        'IEM_MC_MEM_MAP_D80_WO':                    '__mem80',
     1661        'IEM_MC_MEM_MAP_I16_WO':                    '__mem16',
     1662        'IEM_MC_MEM_MAP_I32_WO':                    '__mem32',
     1663        'IEM_MC_MEM_MAP_I64_WO':                    '__mem64',
     1664        'IEM_MC_MEM_MAP_R32_WO':                    '__mem32',
     1665        'IEM_MC_MEM_MAP_R64_WO':                    '__mem64',
     1666        'IEM_MC_MEM_MAP_R80_WO':                    '__mem80',
     1667        'IEM_MC_MEM_MAP_U128_ATOMIC':               '__mem128a',
     1668        'IEM_MC_MEM_MAP_U128_RO':                   '__mem128',
     1669        'IEM_MC_MEM_MAP_U128_RW':                   '__mem128',
     1670        'IEM_MC_MEM_MAP_U128_WO':                   '__mem128',
     1671        'IEM_MC_MEM_MAP_U16_ATOMIC':                '__mem16a',
     1672        'IEM_MC_MEM_MAP_U16_RO':                    '__mem16',
     1673        'IEM_MC_MEM_MAP_U16_RW':                    '__mem16',
     1674        'IEM_MC_MEM_MAP_U16_WO':                    '__mem16',
     1675        'IEM_MC_MEM_MAP_U32_ATOMIC':                '__mem32a',
     1676        'IEM_MC_MEM_MAP_U32_RO':                    '__mem32',
     1677        'IEM_MC_MEM_MAP_U32_RW':                    '__mem32',
     1678        'IEM_MC_MEM_MAP_U32_WO':                    '__mem32',
     1679        'IEM_MC_MEM_MAP_U64_ATOMIC':                '__mem64a',
     1680        'IEM_MC_MEM_MAP_U64_RO':                    '__mem64',
     1681        'IEM_MC_MEM_MAP_U64_RW':                    '__mem64',
     1682        'IEM_MC_MEM_MAP_U64_WO':                    '__mem64',
     1683        'IEM_MC_MEM_MAP_U8_ATOMIC':                 '__mem8a',
     1684        'IEM_MC_MEM_MAP_U8_RO':                     '__mem8',
     1685        'IEM_MC_MEM_MAP_U8_RW':                     '__mem8',
     1686        'IEM_MC_MEM_MAP_U8_WO':                     '__mem8',
     1687    };
     1688    ## Used by analyzeAndAnnotateName for non-memory MC blocks.
     1689    kdAnnotateNameRegStmts = {
     1690        'IEM_MC_FETCH_GREG_U8':                     '__greg8',
     1691        'IEM_MC_FETCH_GREG_U8_ZX_U16':              '__greg8zx16',
     1692        'IEM_MC_FETCH_GREG_U8_ZX_U32':              '__greg8zx32',
     1693        'IEM_MC_FETCH_GREG_U8_ZX_U64':              '__greg8zx64',
     1694        'IEM_MC_FETCH_GREG_U8_SX_U16':              '__greg8sx16',
     1695        'IEM_MC_FETCH_GREG_U8_SX_U32':              '__greg8sx32',
     1696        'IEM_MC_FETCH_GREG_U8_SX_U64':              '__greg8sx64',
     1697        'IEM_MC_FETCH_GREG_U16':                    '__greg16',
     1698        'IEM_MC_FETCH_GREG_U16_ZX_U32':             '__greg16zx32',
     1699        'IEM_MC_FETCH_GREG_U16_ZX_U64':             '__greg16zx64',
     1700        'IEM_MC_FETCH_GREG_U16_SX_U32':             '__greg16sx32',
     1701        'IEM_MC_FETCH_GREG_U16_SX_U64':             '__greg16sx64',
     1702        'IEM_MC_FETCH_GREG_U32':                    '__greg32',
     1703        'IEM_MC_FETCH_GREG_U32_ZX_U64':             '__greg32zx64',
     1704        'IEM_MC_FETCH_GREG_U32_SX_U64':             '__greg32sx64',
     1705        'IEM_MC_FETCH_GREG_U64':                    '__greg64',
     1706        'IEM_MC_FETCH_GREG_U64_ZX_U64':             '__greg64zx64',
     1707        'IEM_MC_FETCH_GREG_PAIR_U32':               '__greg32',
     1708        'IEM_MC_FETCH_GREG_PAIR_U64':               '__greg64',
     1709
     1710        'IEM_MC_STORE_GREG_U8':                     '__greg8',
     1711        'IEM_MC_STORE_GREG_U16':                    '__greg16',
     1712        'IEM_MC_STORE_GREG_U32':                    '__greg32',
     1713        'IEM_MC_STORE_GREG_U64':                    '__greg64',
     1714        'IEM_MC_STORE_GREG_I64':                    '__greg64',
     1715        'IEM_MC_STORE_GREG_U8_CONST':               '__greg8',
     1716        'IEM_MC_STORE_GREG_U16_CONST':              '__greg16',
     1717        'IEM_MC_STORE_GREG_U32_CONST':              '__greg32',
     1718        'IEM_MC_STORE_GREG_U64_CONST':              '__greg64',
     1719        'IEM_MC_STORE_GREG_PAIR_U32':               '__greg32',
     1720        'IEM_MC_STORE_GREG_PAIR_U64':               '__greg64',
     1721
     1722        'IEM_MC_FETCH_SREG_U16':                    '__sreg16',
     1723        'IEM_MC_FETCH_SREG_ZX_U32':                 '__sreg32',
     1724        'IEM_MC_FETCH_SREG_ZX_U64':                 '__sreg64',
     1725        'IEM_MC_FETCH_SREG_BASE_U64':               '__sbase64',
     1726        'IEM_MC_FETCH_SREG_BASE_U32':               '__sbase32',
     1727        'IEM_MC_STORE_SREG_BASE_U64':               '__sbase64',
     1728        'IEM_MC_STORE_SREG_BASE_U32':               '__sbase32',
     1729
     1730        'IEM_MC_REF_GREG_U8':                       '__greg8',
     1731        'IEM_MC_REF_GREG_U16':                      '__greg16',
     1732        'IEM_MC_REF_GREG_U32':                      '__greg32',
     1733        'IEM_MC_REF_GREG_U64':                      '__greg64',
     1734        'IEM_MC_REF_GREG_U8_CONST':                 '__greg8',
     1735        'IEM_MC_REF_GREG_U16_CONST':                '__greg16',
     1736        'IEM_MC_REF_GREG_U32_CONST':                '__greg32',
     1737        'IEM_MC_REF_GREG_U64_CONST':                '__greg64',
     1738        'IEM_MC_REF_GREG_I32':                      '__greg32',
     1739        'IEM_MC_REF_GREG_I64':                      '__greg64',
     1740        'IEM_MC_REF_GREG_I32_CONST':                '__greg32',
     1741        'IEM_MC_REF_GREG_I64_CONST':                '__greg64',
     1742
     1743        'IEM_MC_STORE_FPUREG_R80_SRC_REF':          '__fpu',
     1744        'IEM_MC_REF_FPUREG':                        '__fpu',
     1745
     1746        'IEM_MC_FETCH_MREG_U64':                    '__mreg64',
     1747        'IEM_MC_FETCH_MREG_U32':                    '__mreg32',
     1748        'IEM_MC_STORE_MREG_U64':                    '__mreg64',
     1749        'IEM_MC_STORE_MREG_U32_ZX_U64':             '__mreg32zx64',
     1750        'IEM_MC_REF_MREG_U64':                      '__mreg64',
     1751        'IEM_MC_REF_MREG_U64_CONST':                '__mreg64',
     1752        'IEM_MC_REF_MREG_U32_CONST':                '__mreg32',
     1753
     1754        'IEM_MC_CLEAR_XREG_U32_MASK':               '__xreg32x4',
     1755        'IEM_MC_FETCH_XREG_U128':                   '__xreg128',
     1756        'IEM_MC_FETCH_XREG_XMM':                    '__xreg128',
     1757        'IEM_MC_FETCH_XREG_U64':                    '__xreg64',
     1758        'IEM_MC_FETCH_XREG_U32':                    '__xreg32',
     1759        'IEM_MC_FETCH_XREG_U16':                    '__xreg16',
     1760        'IEM_MC_FETCH_XREG_U8':                     '__xreg8',
     1761        'IEM_MC_FETCH_XREG_PAIR_U128':              '__xreg128p',
     1762        'IEM_MC_FETCH_XREG_PAIR_XMM':               '__xreg128p',
     1763        'IEM_MC_FETCH_XREG_PAIR_U128_AND_RAX_RDX_U64': '__xreg128p',
     1764        'IEM_MC_FETCH_XREG_PAIR_U128_AND_EAX_EDX_U32_SX_U64': '__xreg128p',
     1765
     1766        'IEM_MC_STORE_XREG_U32_U128':               '__xreg32',
     1767        'IEM_MC_STORE_XREG_U128':                   '__xreg128',
     1768        'IEM_MC_STORE_XREG_XMM':                    '__xreg128',
     1769        'IEM_MC_STORE_XREG_XMM_U32':                '__xreg32',
     1770        'IEM_MC_STORE_XREG_XMM_U64':                '__xreg64',
     1771        'IEM_MC_STORE_XREG_U64':                    '__xreg64',
     1772        'IEM_MC_STORE_XREG_U64_ZX_U128':            '__xreg64zx128',
     1773        'IEM_MC_STORE_XREG_U32':                    '__xreg32',
     1774        'IEM_MC_STORE_XREG_U16':                    '__xreg16',
     1775        'IEM_MC_STORE_XREG_U8':                     '__xreg8',
     1776        'IEM_MC_STORE_XREG_U32_ZX_U128':            '__xreg32zx128',
     1777        'IEM_MC_STORE_XREG_HI_U64':                 '__xreg64hi',
     1778        'IEM_MC_STORE_XREG_R32':                    '__xreg32',
     1779        'IEM_MC_STORE_XREG_R64':                    '__xreg64',
     1780        'IEM_MC_BROADCAST_XREG_U8_ZX_VLMAX':        '__xreg8zx',
     1781        'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX':       '__xreg16zx',
     1782        'IEM_MC_BROADCAST_XREG_U32_ZX_VLMAX':       '__xreg32zx',
     1783        'IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX':       '__xreg64zx',
     1784        'IEM_MC_BROADCAST_XREG_U128_ZX_VLMAX':      '__xreg128zx',
     1785        'IEM_MC_REF_XREG_U128':                     '__xreg128',
     1786        'IEM_MC_REF_XREG_U128_CONST':               '__xreg128',
     1787        'IEM_MC_REF_XREG_U32_CONST':                '__xreg32',
     1788        'IEM_MC_REF_XREG_U64_CONST':                '__xreg64',
     1789        'IEM_MC_REF_XREG_R32_CONST':                '__xreg32',
     1790        'IEM_MC_REF_XREG_R64_CONST':                '__xreg64',
     1791        'IEM_MC_REF_XREG_XMM_CONST':                '__xreg128',
     1792        'IEM_MC_COPY_XREG_U128':                    '__xreg128',
     1793
     1794        'IEM_MC_FETCH_YREG_U256':                   '__yreg256',
     1795        'IEM_MC_FETCH_YREG_U128':                   '__yreg128',
     1796        'IEM_MC_FETCH_YREG_U64':                    '__yreg64',
     1797        'IEM_MC_FETCH_YREG_2ND_U64':                '__yreg64',
     1798        'IEM_MC_FETCH_YREG_U32':                    '__yreg32',
     1799        'IEM_MC_STORE_YREG_U128':                   '__yreg128',
     1800        'IEM_MC_STORE_YREG_U32_ZX_VLMAX':           '__yreg32zx',
     1801        'IEM_MC_STORE_YREG_U64_ZX_VLMAX':           '__yreg64zx',
     1802        'IEM_MC_STORE_YREG_U128_ZX_VLMAX':          '__yreg128zx',
     1803        'IEM_MC_STORE_YREG_U256_ZX_VLMAX':          '__yreg256zx',
     1804        'IEM_MC_BROADCAST_YREG_U8_ZX_VLMAX':        '__yreg8',
     1805        'IEM_MC_BROADCAST_YREG_U16_ZX_VLMAX':       '__yreg16',
     1806        'IEM_MC_BROADCAST_YREG_U32_ZX_VLMAX':       '__yreg32',
     1807        'IEM_MC_BROADCAST_YREG_U64_ZX_VLMAX':       '__yreg64',
     1808        'IEM_MC_BROADCAST_YREG_U128_ZX_VLMAX':      '__yreg128',
     1809        'IEM_MC_REF_YREG_U128':                     '__yreg128',
     1810        'IEM_MC_REF_YREG_U128_CONST':               '__yreg128',
     1811        'IEM_MC_REF_YREG_U64_CONST':                '__yreg64',
     1812        'IEM_MC_COPY_YREG_U256_ZX_VLMAX':           '__yreg256zx',
     1813        'IEM_MC_COPY_YREG_U128_ZX_VLMAX':           '__yreg128zx',
     1814        'IEM_MC_COPY_YREG_U64_ZX_VLMAX':            '__yreg64zx',
     1815        'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX':       '__yreg3296',
     1816        'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX':       '__yreg6464',
     1817        'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX':   '__yreg64hi64hi',
     1818        'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX':   '__yreg64lo64lo',
     1819        'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX':'__yreg64',
     1820        'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX':'__yreg64',
     1821    };
     1822    def analyzeAndAnnotateName(self, aoStmts: List[iai.McStmt]):
     1823        """
     1824        Scans the statements and variation lists for clues about the threaded function,
     1825        and sets self.sSubName if successfull.
     1826        """
     1827        dHits = {};
     1828        cHits = iai.McStmt.countStmtsByName(aoStmts, self.kdAnnotateNameMemStmts, dHits);
     1829        if cHits > 0:
     1830            sStmtNm = sorted(dHits.keys())[-1]; # priority: STORE, MEM_MAP, FETCH.
     1831            sName = self.kdAnnotateNameMemStmts[sStmtNm];
     1832        else:
     1833            cHits = iai.McStmt.countStmtsByName(aoStmts, self.kdAnnotateNameRegStmts, dHits);
     1834            if not cHits:
     1835                return;
     1836            sStmtNm = sorted(dHits.keys())[-1]; # priority: STORE, MEM_MAP, FETCH.
     1837            sName = self.kdAnnotateNameRegStmts[sStmtNm];
     1838        self.sSubName = sName;
     1839        return;
    15901840
    15911841    def analyzeFindVariablesAndCallArgs(self, aoStmts: List[iai.McStmt]) -> bool:
     
    16871937        """
    16881938
     1939        #
     1940        # Decode the block into a list/tree of McStmt objects.
     1941        #
     1942        aoStmts = self.oMcBlock.decode();
     1943
     1944        #
    16891945        # Check the block for errors before we proceed (will decode it).
     1946        #
    16901947        asErrors = self.oMcBlock.check();
    16911948        if asErrors:
     
    16931950                                       for sError in asErrors]));
    16941951
    1695         # Decode the block into a list/tree of McStmt objects.
    1696         aoStmts = self.oMcBlock.decode();
    1697 
     1952        #
    16981953        # Scan the statements for local variables and call arguments (self.dVariables).
     1954        #
    16991955        self.analyzeFindVariablesAndCallArgs(aoStmts);
    17001956
     1957        #
    17011958        # Scan the code for IEM_CIMPL_F_ and other clues.
     1959        #
    17021960        self.dsCImplFlags = self.oMcBlock.dsCImplFlags.copy();
    17031961        dEflStmts         = {};
     
    17081966            self.error('Mixing CIMPL/AIMPL/AIMPL_WITH_FXSTATE calls', oGenerator);
    17091967
     1968        #
    17101969        # Analyse EFLAGS related MCs and @opflmodify and friends.
     1970        #
    17111971        if dEflStmts:
    17121972            oInstruction = self.oMcBlock.oInstruction; # iai.Instruction
     
    17442004                                   % (sFlag, ', '.join(oInstruction.asFlModify)), oGenerator);
    17452005
     2006        #
    17462007        # Create variations as needed.
     2008        #
    17472009        if iai.McStmt.findStmtByNames(aoStmts,
    17482010                                      { 'IEM_MC_DEFER_TO_CIMPL_0_RET': True,
     
    18142076        self.dVariations = { oVar.sVariation: oVar for oVar in self.aoVariations };
    18152077
     2078        #
     2079        # Try annotate the threaded function name.
     2080        #
     2081        self.analyzeAndAnnotateName(aoStmts);
     2082
     2083        #
    18162084        # Continue the analysis on each variation.
     2085        #
    18172086        for oVariation in self.aoVariations:
    18182087            oVariation.analyzeVariation(aoStmts);
     
    22632532                  % (cCount, dRawParamCounts.get(cCount, 0), dMinParamCounts.get(cCount, 0)),
    22642533                  file = sys.stderr);
     2534
     2535        # Do another pass over the threaded functions to settle the name suffix.
     2536        iThreadedFn = 0;
     2537        while iThreadedFn < len(self.aoThreadedFuncs):
     2538            oFunction = self.aoThreadedFuncs[iThreadedFn].oMcBlock.oFunction;
     2539            assert oFunction;
     2540            iThreadedFnNext = iThreadedFn + 1;
     2541            dSubNames = { self.aoThreadedFuncs[iThreadedFn].sSubName: 1 };
     2542            while (    iThreadedFnNext < len(self.aoThreadedFuncs)
     2543                   and self.aoThreadedFuncs[iThreadedFnNext].oMcBlock.oFunction == oFunction):
     2544                dSubNames[self.aoThreadedFuncs[iThreadedFnNext].sSubName] = 1;
     2545                iThreadedFnNext += 1;
     2546            if iThreadedFnNext - iThreadedFn > len(dSubNames):
     2547                iSubName = 0;
     2548                while iThreadedFn + iSubName < iThreadedFnNext:
     2549                    self.aoThreadedFuncs[iThreadedFn + iSubName].sSubName += '_%s' % (iSubName,);
     2550                    iSubName += 1;
     2551            iThreadedFn = iThreadedFnNext;
    22652552
    22662553        # Populate aidxFirstFunctions.  This is ASSUMING that
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