Changeset 103542 in vbox
- Timestamp:
- Feb 23, 2024 12:26:32 AM (7 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
-
IEMAllInstPython.py (modified) (5 diffs)
-
IEMAllThrdPython.py (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r103256 r103542 1505 1505 ## @} 1506 1506 1507 ## All the MC blocks associated with this instruction. 1508 self.aoMcBlocks = [] # type: List[McBlock] 1509 1507 1510 def toString(self, fRepr = False): 1508 1511 """ Turn object into a string. """ … … 1867 1870 return oHit; 1868 1871 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; 1869 1890 1870 1891 def isCppStmt(self): … … 5364 5385 self.raiseError(oXcpt.args[0]); 5365 5386 5387 if self.oCurMcBlock.oInstruction: 5388 self.oCurMcBlock.oInstruction.aoMcBlocks.append(self.oCurMcBlock); 5366 5389 self.iMcBlockInFunc += 1; 5367 5390 return True; … … 5528 5551 5529 5552 g_aoMcBlocks.append(oMcBlock); 5553 if oMcBlock.oInstruction: 5554 oMcBlock.oInstruction.aoMcBlocks.append(oMcBlock); 5530 5555 self.cTotalMcBlocks += 1; 5531 5556 self.iMcBlockInFunc += 1; … … 6061 6086 6062 6087 # 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,); 6088 def __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(); 6067 6094 6068 6095 ## The parsed content of IEMAllInstCommonBodyMacros.h. -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r103404 r103542 622 622 if sName.startswith('iemOp_'): 623 623 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, ); 627 625 628 626 def getThreadedFunctionName(self): … … 630 628 if sName.startswith('iemOp_'): 631 629 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, ); 635 631 636 632 def getNativeFunctionName(self): … … 644 640 if sName.startswith('iemOp_'): 645 641 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, ); 649 643 650 644 def getThreadedFunctionStatisticsName(self): … … 666 660 sVarNm = 'DeferToCImpl'; 667 661 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 ); 671 663 672 664 def isWithFlagsCheckingAndClearingVariation(self): … … 1556 1548 ## and those determined by analyzeCodeOperation(). 1557 1549 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); 1558 1554 1559 1555 @staticmethod … … 1588 1584 """ Emits a warning. """ 1589 1585 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; 1590 1840 1591 1841 def analyzeFindVariablesAndCallArgs(self, aoStmts: List[iai.McStmt]) -> bool: … … 1687 1937 """ 1688 1938 1939 # 1940 # Decode the block into a list/tree of McStmt objects. 1941 # 1942 aoStmts = self.oMcBlock.decode(); 1943 1944 # 1689 1945 # Check the block for errors before we proceed (will decode it). 1946 # 1690 1947 asErrors = self.oMcBlock.check(); 1691 1948 if asErrors: … … 1693 1950 for sError in asErrors])); 1694 1951 1695 # Decode the block into a list/tree of McStmt objects. 1696 aoStmts = self.oMcBlock.decode(); 1697 1952 # 1698 1953 # Scan the statements for local variables and call arguments (self.dVariables). 1954 # 1699 1955 self.analyzeFindVariablesAndCallArgs(aoStmts); 1700 1956 1957 # 1701 1958 # Scan the code for IEM_CIMPL_F_ and other clues. 1959 # 1702 1960 self.dsCImplFlags = self.oMcBlock.dsCImplFlags.copy(); 1703 1961 dEflStmts = {}; … … 1708 1966 self.error('Mixing CIMPL/AIMPL/AIMPL_WITH_FXSTATE calls', oGenerator); 1709 1967 1968 # 1710 1969 # Analyse EFLAGS related MCs and @opflmodify and friends. 1970 # 1711 1971 if dEflStmts: 1712 1972 oInstruction = self.oMcBlock.oInstruction; # iai.Instruction … … 1744 2004 % (sFlag, ', '.join(oInstruction.asFlModify)), oGenerator); 1745 2005 2006 # 1746 2007 # Create variations as needed. 2008 # 1747 2009 if iai.McStmt.findStmtByNames(aoStmts, 1748 2010 { 'IEM_MC_DEFER_TO_CIMPL_0_RET': True, … … 1814 2076 self.dVariations = { oVar.sVariation: oVar for oVar in self.aoVariations }; 1815 2077 2078 # 2079 # Try annotate the threaded function name. 2080 # 2081 self.analyzeAndAnnotateName(aoStmts); 2082 2083 # 1816 2084 # Continue the analysis on each variation. 2085 # 1817 2086 for oVariation in self.aoVariations: 1818 2087 oVariation.analyzeVariation(aoStmts); … … 2263 2532 % (cCount, dRawParamCounts.get(cCount, 0), dMinParamCounts.get(cCount, 0)), 2264 2533 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; 2265 2552 2266 2553 # Populate aidxFirstFunctions. This is ASSUMING that
Note:
See TracChangeset
for help on using the changeset viewer.

