mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	 51fc725117
			
		
	
	
		51fc725117
		
			
		
	
	
	
	
		
			
			Added a new, experimental, tracing optimizer and interpreter (a.k.a. "tier 2"). This currently pessimizes, so don't use yet -- this is infrastructure so we can experiment with optimizing passes. To enable it, pass ``-Xuops`` or set ``PYTHONUOPS=1``. To get debug output, set ``PYTHONUOPSDEBUG=N`` where ``N`` is a debug level (0-4, where 0 is no debug output and 4 is excessively verbose). All of this code is likely to change dramatically before the 3.13 feature freeze. But this is a first step.
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			681 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			681 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_INTERNAL_UOPS_H
 | |
| #define Py_INTERNAL_UOPS_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #ifndef Py_BUILD_CORE
 | |
| #  error "this header requires Py_BUILD_CORE define"
 | |
| #endif
 | |
| 
 | |
| #define _Py_UOP_MAX_TRACE_LENGTH 16
 | |
| 
 | |
| typedef struct {
 | |
|     int opcode;
 | |
|     uint64_t operand;  // Sometimes oparg, sometimes a cache entry
 | |
| } _PyUOpInstruction;
 | |
| 
 | |
| typedef struct {
 | |
|     _PyExecutorObject base;
 | |
|     _PyUOpInstruction trace[_Py_UOP_MAX_TRACE_LENGTH];  // TODO: variable length
 | |
| } _PyUOpExecutorObject;
 | |
| 
 | |
| _PyInterpreterFrame *_PyUopExecute(
 | |
|     _PyExecutorObject *executor,
 | |
|     _PyInterpreterFrame *frame,
 | |
|     PyObject **stack_pointer);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif /* !Py_INTERNAL_UOPS_H */
 |