@@ -1127,6 +1127,13 @@ dummy_func(
1127
1127
Py_DECREF (seq );
1128
1128
}
1129
1129
1130
+ family (store_attr ) = {
1131
+ STORE_ATTR ,
1132
+ STORE_ATTR_INSTANCE_VALUE ,
1133
+ STORE_ATTR_SLOT ,
1134
+ STORE_ATTR_WITH_HINT ,
1135
+ };
1136
+
1130
1137
inst (STORE_ATTR , (counter /1 , v , owner , unused /3 -- )) {
1131
1138
if (ADAPTIVE_COUNTER_IS_ZERO (counter )) {
1132
1139
assert (cframe .use_tracing == 0 );
@@ -2008,24 +2015,17 @@ dummy_func(
2008
2015
Py_DECREF (owner );
2009
2016
}
2010
2017
2011
- // stack effect: (__0, __1 -- )
2012
- inst (STORE_ATTR_SLOT ) {
2018
+ inst (STORE_ATTR_SLOT , (unused /1 , type_version /2 , index /1 , value , owner -- )) {
2013
2019
assert (cframe .use_tracing == 0 );
2014
- PyObject * owner = TOP ();
2015
2020
PyTypeObject * tp = Py_TYPE (owner );
2016
- _PyAttrCache * cache = (_PyAttrCache * )next_instr ;
2017
- uint32_t type_version = read_u32 (cache -> version );
2018
2021
assert (type_version != 0 );
2019
2022
DEOPT_IF (tp -> tp_version_tag != type_version , STORE_ATTR );
2020
- char * addr = (char * )owner + cache -> index ;
2023
+ char * addr = (char * )owner + index ;
2021
2024
STAT_INC (STORE_ATTR , hit );
2022
- STACK_SHRINK (1 );
2023
- PyObject * value = POP ();
2024
2025
PyObject * old_value = * (PyObject * * )addr ;
2025
2026
* (PyObject * * )addr = value ;
2026
2027
Py_XDECREF (old_value );
2027
2028
Py_DECREF (owner );
2028
- JUMPBY (INLINE_CACHE_ENTRIES_STORE_ATTR );
2029
2029
}
2030
2030
2031
2031
family (compare_op ) = {
@@ -3654,9 +3654,6 @@ family(load_fast) = { LOAD_FAST, LOAD_FAST__LOAD_CONST, LOAD_FAST__LOAD_FAST };
3654
3654
family (load_global ) = {
3655
3655
LOAD_GLOBAL , LOAD_GLOBAL_BUILTIN ,
3656
3656
LOAD_GLOBAL_MODULE };
3657
- family (store_attr ) = {
3658
- STORE_ATTR , STORE_ATTR_INSTANCE_VALUE ,
3659
- STORE_ATTR_SLOT , STORE_ATTR_WITH_HINT };
3660
3657
family (store_fast ) = { STORE_FAST , STORE_FAST__LOAD_FAST , STORE_FAST__STORE_FAST };
3661
3658
family (store_subscr ) = {
3662
3659
STORE_SUBSCR , STORE_SUBSCR_DICT ,
0 commit comments