@@ -86,12 +86,14 @@ static PyObject *exit_func, *lasti, *val, *retval, *obj, *iter;
86
86
static size_t jump ;
87
87
// Dummy variables for cache effects
88
88
static _Py_CODEUNIT when_to_jump_mask , invert , counter , index , hint ;
89
+ static _Py_CODEUNIT word ;
89
90
static uint32_t type_version ;
90
91
// Dummy opcode names for 'op' opcodes
91
92
#define _COMPARE_OP_FLOAT 1003
92
93
#define _COMPARE_OP_INT 1004
93
94
#define _COMPARE_OP_STR 1005
94
95
#define _JUMP_IF 1006
96
+ #define JOIN 0
95
97
96
98
static PyObject *
97
99
dummy_func (
@@ -115,6 +117,14 @@ dummy_func(
115
117
switch (opcode ) {
116
118
117
119
// BEGIN BYTECODES //
120
+
121
+ op (JOIN , (word /1 -- )) {
122
+ #ifndef NDEBUG
123
+ opcode = _Py_OPCODE (word );
124
+ #endif
125
+ oparg = _Py_OPARG (word );
126
+ }
127
+
118
128
inst (NOP , (-- )) {
119
129
}
120
130
@@ -154,11 +164,11 @@ dummy_func(
154
164
SETLOCAL (oparg , value );
155
165
}
156
166
157
- super (LOAD_FAST__LOAD_FAST ) = LOAD_FAST + LOAD_FAST ;
158
- super (LOAD_FAST__LOAD_CONST ) = LOAD_FAST + LOAD_CONST ;
159
- super (STORE_FAST__LOAD_FAST ) = STORE_FAST + LOAD_FAST ;
160
- super (STORE_FAST__STORE_FAST ) = STORE_FAST + STORE_FAST ;
161
- super (LOAD_CONST__LOAD_FAST ) = LOAD_CONST + LOAD_FAST ;
167
+ macro (LOAD_FAST__LOAD_FAST ) = LOAD_FAST + JOIN + LOAD_FAST ;
168
+ macro (LOAD_FAST__LOAD_CONST ) = LOAD_FAST + JOIN + LOAD_CONST ;
169
+ macro (STORE_FAST__LOAD_FAST ) = STORE_FAST + JOIN + LOAD_FAST ;
170
+ macro (STORE_FAST__STORE_FAST ) = STORE_FAST + JOIN + STORE_FAST ;
171
+ macro (LOAD_CONST__LOAD_FAST ) = LOAD_CONST + JOIN + LOAD_FAST ;
162
172
163
173
inst (POP_TOP , (value -- )) {
164
174
Py_DECREF (value );
@@ -2043,7 +2053,7 @@ dummy_func(
2043
2053
}
2044
2054
}
2045
2055
// We're praying that the compiler optimizes the flags manipuations.
2046
- super (COMPARE_OP_FLOAT_JUMP ) = _COMPARE_OP_FLOAT + _JUMP_IF ;
2056
+ macro (COMPARE_OP_FLOAT_JUMP ) = _COMPARE_OP_FLOAT + JOIN + _JUMP_IF ;
2047
2057
2048
2058
// Similar to COMPARE_OP_FLOAT
2049
2059
op (_COMPARE_OP_INT , (unused /1 , when_to_jump_mask /1 , left , right -- jump : size_t )) {
@@ -2063,7 +2073,7 @@ dummy_func(
2063
2073
_Py_DECREF_SPECIALIZED (right , (destructor )PyObject_Free );
2064
2074
jump = sign_ish & when_to_jump_mask ;
2065
2075
}
2066
- super (COMPARE_OP_INT_JUMP ) = _COMPARE_OP_INT + _JUMP_IF ;
2076
+ macro (COMPARE_OP_INT_JUMP ) = _COMPARE_OP_INT + JOIN + _JUMP_IF ;
2067
2077
2068
2078
// Similar to COMPARE_OP_FLOAT, but for ==, != only
2069
2079
op (_COMPARE_OP_STR , (unused /1 , invert /1 , left , right -- jump : size_t )) {
@@ -2080,7 +2090,7 @@ dummy_func(
2080
2090
assert (invert == 0 || invert == 1 );
2081
2091
jump = res ^ invert ;
2082
2092
}
2083
- super (COMPARE_OP_STR_JUMP ) = _COMPARE_OP_STR + _JUMP_IF ;
2093
+ macro (COMPARE_OP_STR_JUMP ) = _COMPARE_OP_STR + JOIN + _JUMP_IF ;
2084
2094
2085
2095
// stack effect: (__0 -- )
2086
2096
inst (IS_OP ) {
0 commit comments