@@ -1068,8 +1068,13 @@ dummy_func(
1068
1068
}
1069
1069
}
1070
1070
1071
- // error: LOAD_GLOBAL has irregular stack effect
1072
- inst (LOAD_GLOBAL ) {
1071
+ family (load_global , INLINE_CACHE_ENTRIES_LOAD_GLOBAL ) = {
1072
+ LOAD_GLOBAL ,
1073
+ LOAD_GLOBAL_MODULE ,
1074
+ LOAD_GLOBAL_BUILTIN ,
1075
+ };
1076
+
1077
+ inst (LOAD_GLOBAL , (unused /1 , unused /1 , unused /2 , unused /1 -- null if (oparg & 1 ), v )) {
1073
1078
#if ENABLE_SPECIALIZATION
1074
1079
_PyLoadGlobalCache * cache = (_PyLoadGlobalCache * )next_instr ;
1075
1080
if (ADAPTIVE_COUNTER_IS_ZERO (cache -> counter )) {
@@ -1082,10 +1087,7 @@ dummy_func(
1082
1087
STAT_INC (LOAD_GLOBAL , deferred );
1083
1088
DECREMENT_ADAPTIVE_COUNTER (cache -> counter );
1084
1089
#endif /* ENABLE_SPECIALIZATION */
1085
- int push_null = oparg & 1 ;
1086
- PEEK (0 ) = NULL ;
1087
1090
PyObject * name = GETITEM (names , oparg >>1 );
1088
- PyObject * v ;
1089
1091
if (PyDict_CheckExact (GLOBALS ())
1090
1092
&& PyDict_CheckExact (BUILTINS ()))
1091
1093
{
@@ -1099,7 +1101,7 @@ dummy_func(
1099
1101
format_exc_check_arg (tstate , PyExc_NameError ,
1100
1102
NAME_ERROR_MSG , name );
1101
1103
}
1102
- goto error ;
1104
+ ERROR_IF (true, error ) ;
1103
1105
}
1104
1106
Py_INCREF (v );
1105
1107
}
@@ -1109,9 +1111,7 @@ dummy_func(
1109
1111
/* namespace 1: globals */
1110
1112
v = PyObject_GetItem (GLOBALS (), name );
1111
1113
if (v == NULL ) {
1112
- if (!_PyErr_ExceptionMatches (tstate , PyExc_KeyError )) {
1113
- goto error ;
1114
- }
1114
+ ERROR_IF (!_PyErr_ExceptionMatches (tstate , PyExc_KeyError ), error );
1115
1115
_PyErr_Clear (tstate );
1116
1116
1117
1117
/* namespace 2: builtins */
@@ -1122,58 +1122,42 @@ dummy_func(
1122
1122
tstate , PyExc_NameError ,
1123
1123
NAME_ERROR_MSG , name );
1124
1124
}
1125
- goto error ;
1125
+ ERROR_IF (true, error ) ;
1126
1126
}
1127
1127
}
1128
1128
}
1129
- /* Skip over inline cache */
1130
- JUMPBY (INLINE_CACHE_ENTRIES_LOAD_GLOBAL );
1131
- STACK_GROW (push_null );
1132
- PUSH (v );
1129
+ null = NULL ;
1133
1130
}
1134
1131
1135
- // error: LOAD_GLOBAL has irregular stack effect
1136
- inst (LOAD_GLOBAL_MODULE ) {
1132
+ inst (LOAD_GLOBAL_MODULE , (unused /1 , index /1 , version /2 , unused /1 -- null if (oparg & 1 ), res )) {
1137
1133
assert (cframe .use_tracing == 0 );
1138
1134
DEOPT_IF (!PyDict_CheckExact (GLOBALS ()), LOAD_GLOBAL );
1139
1135
PyDictObject * dict = (PyDictObject * )GLOBALS ();
1140
- _PyLoadGlobalCache * cache = (_PyLoadGlobalCache * )next_instr ;
1141
- uint32_t version = read_u32 (cache -> module_keys_version );
1142
1136
DEOPT_IF (dict -> ma_keys -> dk_version != version , LOAD_GLOBAL );
1143
1137
assert (DK_IS_UNICODE (dict -> ma_keys ));
1144
1138
PyDictUnicodeEntry * entries = DK_UNICODE_ENTRIES (dict -> ma_keys );
1145
- PyObject * res = entries [cache -> index ].me_value ;
1139
+ res = entries [index ].me_value ;
1146
1140
DEOPT_IF (res == NULL , LOAD_GLOBAL );
1147
- int push_null = oparg & 1 ;
1148
- PEEK (0 ) = NULL ;
1149
- JUMPBY (INLINE_CACHE_ENTRIES_LOAD_GLOBAL );
1141
+ Py_INCREF (res );
1150
1142
STAT_INC (LOAD_GLOBAL , hit );
1151
- STACK_GROW (push_null + 1 );
1152
- SET_TOP (Py_NewRef (res ));
1143
+ null = NULL ;
1153
1144
}
1154
1145
1155
- // error: LOAD_GLOBAL has irregular stack effect
1156
- inst (LOAD_GLOBAL_BUILTIN ) {
1146
+ inst (LOAD_GLOBAL_BUILTIN , (unused /1 , index /1 , mod_version /2 , bltn_version /1 -- null if (oparg & 1 ), res )) {
1157
1147
assert (cframe .use_tracing == 0 );
1158
1148
DEOPT_IF (!PyDict_CheckExact (GLOBALS ()), LOAD_GLOBAL );
1159
1149
DEOPT_IF (!PyDict_CheckExact (BUILTINS ()), LOAD_GLOBAL );
1160
1150
PyDictObject * mdict = (PyDictObject * )GLOBALS ();
1161
1151
PyDictObject * bdict = (PyDictObject * )BUILTINS ();
1162
- _PyLoadGlobalCache * cache = (_PyLoadGlobalCache * )next_instr ;
1163
- uint32_t mod_version = read_u32 (cache -> module_keys_version );
1164
- uint16_t bltn_version = cache -> builtin_keys_version ;
1165
1152
DEOPT_IF (mdict -> ma_keys -> dk_version != mod_version , LOAD_GLOBAL );
1166
1153
DEOPT_IF (bdict -> ma_keys -> dk_version != bltn_version , LOAD_GLOBAL );
1167
1154
assert (DK_IS_UNICODE (bdict -> ma_keys ));
1168
1155
PyDictUnicodeEntry * entries = DK_UNICODE_ENTRIES (bdict -> ma_keys );
1169
- PyObject * res = entries [cache -> index ].me_value ;
1156
+ res = entries [index ].me_value ;
1170
1157
DEOPT_IF (res == NULL , LOAD_GLOBAL );
1171
- int push_null = oparg & 1 ;
1172
- PEEK (0 ) = NULL ;
1173
- JUMPBY (INLINE_CACHE_ENTRIES_LOAD_GLOBAL );
1158
+ Py_INCREF (res );
1174
1159
STAT_INC (LOAD_GLOBAL , hit );
1175
- STACK_GROW (push_null + 1 );
1176
- SET_TOP (Py_NewRef (res ));
1160
+ null = NULL ;
1177
1161
}
1178
1162
1179
1163
inst (DELETE_FAST , (-- )) {
@@ -3212,9 +3196,6 @@ family(call, INLINE_CACHE_ENTRIES_CALL) = {
3212
3196
family (for_iter , INLINE_CACHE_ENTRIES_FOR_ITER ) = {
3213
3197
FOR_ITER , FOR_ITER_LIST ,
3214
3198
FOR_ITER_RANGE };
3215
- family (load_global , INLINE_CACHE_ENTRIES_LOAD_GLOBAL ) = {
3216
- LOAD_GLOBAL , LOAD_GLOBAL_BUILTIN ,
3217
- LOAD_GLOBAL_MODULE };
3218
3199
family (store_fast ) = { STORE_FAST , STORE_FAST__LOAD_FAST , STORE_FAST__STORE_FAST };
3219
3200
family (unpack_sequence , INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE ) = {
3220
3201
UNPACK_SEQUENCE , UNPACK_SEQUENCE_LIST ,
0 commit comments