Changeset 101722 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
- Timestamp:
- Nov 3, 2023 12:36:45 AM (16 months ago)
- svn:sync-xref-src-repo-rev:
- 159818
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r101704 r101722 419 419 'IEM_CIMPL_F_END_TB': True, 420 420 'IEM_CIMPL_F_XCPT': True, 421 'IEM_CIMPL_F_CALLS_CIMPL': False, 422 'IEM_CIMPL_F_CALLS_AIMPL': False, 423 'IEM_CIMPL_F_CALLS_AIMPL_WITH_FXSTATE': False, 421 424 }; 422 425 … … 1331 1334 self.dsCImplFlags['IEM_CIMPL_F_BRANCH_CONDITIONAL'] = True; 1332 1335 1336 # Check for CIMPL and AIMPL calls. 1337 if oStmt.sName.startswith('IEM_MC_CALL_'): 1338 if oStmt.sName.startswith('IEM_MC_CALL_CIMPL_'): 1339 self.dsCImplFlags['IEM_CIMPL_F_CALLS_CIMPL'] = True; 1340 elif ( oStmt.sName.startswith('IEM_MC_CALL_VOID_AIMPL_') 1341 or oStmt.sName.startswith('IEM_MC_CALL_AIMPL_') 1342 or oStmt.sName.startswith('IEM_MC_CALL_AVX_AIMPL_')): 1343 self.dsCImplFlags['IEM_CIMPL_F_CALLS_AIMPL'] = True; 1344 elif ( oStmt.sName.startswith('IEM_MC_CALL_SSE_AIMPL_') 1345 or oStmt.sName.startswith('IEM_MC_CALL_MMX_AIMPL_') 1346 or oStmt.sName.startswith('IEM_MC_CALL_FPU_AIMPL_')): 1347 self.dsCImplFlags['IEM_CIMPL_F_CALLS_AIMPL_WITH_FXSTATE'] = True; 1348 else: 1349 raise Exception('Unknown IEM_MC_CALL_* statement: %s' % (oStmt.sName,)); 1350 1333 1351 # Process branches of conditionals recursively. 1334 1352 if isinstance(oStmt, iai.McStmtCond): … … 1361 1379 self.dsCImplFlags = self.oMcBlock.dsCImplFlags.copy(); 1362 1380 self.analyzeCodeOperation(aoStmts); 1381 if ( ('IEM_CIMPL_F_CALLS_CIMPL' in self.dsCImplFlags) 1382 + ('IEM_CIMPL_F_CALLS_AIMPL' in self.dsCImplFlags) 1383 + ('IEM_CIMPL_F_CALLS_AIMPL_WITH_FXSTATE' in self.dsCImplFlags) > 1): 1384 self.raiseProblem('Mixing CIMPL/AIMPL/AIMPL_WITH_FXSTATE calls'); 1363 1385 1364 1386 # Create variations as needed. … … 1824 1846 if ian.g_dUnsupportedMcStmtLastOneVarStats: 1825 1847 asTopKeys = sorted(ian.g_dUnsupportedMcStmtLastOneVarStats, reverse = True, 1826 key = lambda sSortKey: len(ian.g_dUnsupportedMcStmtLastOneVarStats[sSortKey]))[:1 0];1848 key = lambda sSortKey: len(ian.g_dUnsupportedMcStmtLastOneVarStats[sSortKey]))[:16]; 1827 1849 print('todo:', file = sys.stderr); 1828 print('todo: Top %s variations with variables and oneunsupported statement dependency:' % (len(asTopKeys),),1850 print('todo: Top %s variations with variables and 1-2 unsupported statement dependency:' % (len(asTopKeys),), 1829 1851 file = sys.stderr); 1830 1852 cchMaxKey = max([len(sKey) for sKey in asTopKeys]); … … 1861 1883 cbVars = 0; 1862 1884 for oVar in oThreadedFunction.oMcBlock.aoLocals: 1863 1885 cbVars += (getTypeBitCount(oVar.sType) + 63) // 64 * 8; 1864 1886 cbMaxVars = max(cbMaxVars, cbVars); 1865 1887 cbMaxArgs = max(cbMaxArgs, cbArgs); … … 2366 2388 # 2367 2389 elif oThreadedFunction.oMcBlock.iBeginLine != oThreadedFunction.oMcBlock.iEndLine: 2368 assert sLine.count('IEM_MC_') - sLine.count('IEM_MC_F_') == 1, 'sLine="%s"' % (sLine,); 2390 assert ( (sLine.count('IEM_MC_') - sLine.count('IEM_MC_F_') == 1) 2391 or oThreadedFunction.oMcBlock.iMacroExp == iai.McBlock.kMacroExp_Partial), 'sLine="%s"' % (sLine,); 2369 2392 oOut.write(sLine[:oThreadedFunction.oMcBlock.offBeginLine]); 2370 2393 sModified = oThreadedFunction.generateInputCode().strip(); … … 2373 2396 iLine = oThreadedFunction.oMcBlock.iEndLine; 2374 2397 sLine = oParser.asLines[iLine - 1]; 2375 assert sLine.count('IEM_MC_') - sLine.count('IEM_MC_F_') == 1 or len(oThreadedFunction.oMcBlock.aoStmts) == 1; 2398 assert ( sLine.count('IEM_MC_') - sLine.count('IEM_MC_F_') == 1 2399 or len(oThreadedFunction.oMcBlock.aoStmts) == 1 2400 or oThreadedFunction.oMcBlock.iMacroExp == iai.McBlock.kMacroExp_Partial); 2376 2401 oOut.write(sLine[oThreadedFunction.oMcBlock.offAfterEnd : ]); 2377 2402
Note:
See TracChangeset
for help on using the changeset viewer.