8000 fix tier 2 · python/cpython@df176bf · GitHub
[go: up one dir, main page]

Skip to content

Commit df176bf

Browse files
fix tier 2
1 parent 512cd2e commit df176bf

File tree

4 files changed

+459
-720
lines changed

4 files changed

+459
-720
lines changed

Python/bytecodes.c

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,7 +3132,7 @@ dummy_func(
31323132
res = PyObject_To_StackRef_Steal(res_o);
31333133
}
31343134

3135-
inst(WITH_EXCEPT_START, (exit_func: PyObject *, lasti, unused, val -- exit_func, lasti, unused, val, res: PyObject *)) {
3135+
inst(WITH_EXCEPT_START, (exit_func, lasti, unused, val -- exit_func, lasti, unused, val, res: PyObject *)) {
31363136
/* At the top of the stack are 4 values:
31373137
- val: TOP = exc_info()
31383138
- unused: SECOND = previous exception
@@ -3144,6 +3144,7 @@ dummy_func(
31443144
PyObject *exc, *tb;
31453145

31463146
PyObject *val_o = PyStackRef_To_PyObject_Borrow(val);
3147+
PyObject *exit_func_o = PyStackRef_To_PyObject_Borrow(exit_func);
31473148

31483149
assert(val_o && PyExceptionInstance_Check(val_o));
31493150
exc = PyExceptionInstance_Class(val_o);
@@ -3157,7 +3158,7 @@ dummy_func(
31573158
assert(PyLong_Check(PyStackRef_To_PyObject_Borrow(lasti)));
31583159
(void)lasti; // Shut up compiler warning if asserts are off
31593160
_PyStackRef stack[4] = {Py_STACKREF_NULL, PyObject_To_StackRef_Steal(exc), val, PyObject_To_StackRef_Steal(tb)};
3160-
res = PyObject_Vectorcall_StackRef(PyStackRef_To_PyObject_Borrow(exit_func), stack + 1,
3161+
res = PyObject_Vectorcall_StackRef(exit_func_o, stack + 1,
31613162
3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
31623163
ERROR_IF(res == NULL, error);
31633164
}
@@ -4526,29 +4527,37 @@ dummy_func(
45264527
///////// Tier-2 only opcodes /////////
45274528

45284529
op (_GUARD_IS_TRUE_POP, (flag -- )) {
4530+
PyObject *flag_o = PyStackRef_To_PyObject_Borrow(flag);
4531+
45294532
SYNC_SP();
4530-
EXIT_IF(!Py_IsTrue(flag));
4531-
assert(Py_IsTrue(flag));
4533+
EXIT_IF(!Py_IsTrue(flag_o));
4534+
assert(Py_IsTrue(flag_o));
45324535
}
45334536

45344537
op (_GUARD_IS_FALSE_POP, (flag -- )) {
4538+
PyObject *flag_o = PyStackRef_To_PyObject_Borrow(flag);
4539+
45354540
SYNC_SP();
4536-
EXIT_IF(!Py_IsFalse(flag));
4537-
assert(Py_IsFalse(flag));
4541+
EXIT_IF(!Py_IsFalse(flag_o));
4542+
assert(Py_IsFalse(flag_o));
45384543
}
45394544

45404545
op (_GUARD_IS_NONE_POP, (val -- )) {
4546+
PyObject *val_o = PyStackRef_To_PyObject_Borrow(val);
4547+
45414548
SYNC_SP();
4542-
if (!Py_IsNone(val)) {
4543-
PyStackRef_DECREF(val_stackref);
4549+
if (!Py_IsNone(val_o)) {
4550+
PyStackRef_DECREF(val);
45444551
EXIT_IF(1);
45454552
}
45464553
}
45474554

45484555
op (_GUARD_IS_NOT_NONE_POP, (val -- )) {
4556+
PyObject *val_o = PyStackRef_To_PyObject_Borrow(val);
4557+
45494558
SYNC_SP();
4550-
EXIT_IF(Py_IsNone(val));
4551-
PyStackRef_DECREF(val_stackref);
4559+
EXIT_IF(Py_IsNone(val_o));
4560+
PyStackRef_DECREF(val);
45524561
}
45534562

45544563
op(_JUMP_TO_TOP, (--)) {
@@ -4585,25 +4594,25 @@ dummy_func(
45854594
}
45864595

45874596
tier2 pure op(_LOAD_CONST_INLINE, (ptr/4 -- value)) {
4588-
value = Py_NewRef(ptr);
4597+
value = PyObject_To_StackRef_New(ptr);
45894598
}
45904599

45914600
tier2 pure op(_LOAD_CONST_INLINE_BORROW, (ptr/4 -- value)) {
4592-
value = ptr;
4601+
value = PyObject_To_StackRef_Borrow(ptr);
45934602
}
45944603

45954604
tier2 pure op (_POP_TOP_LOAD_CONST_INLINE_BORROW, (ptr/4, pop -- value)) {
45964605
DECREF_INPUTS();
4597-
value = ptr;
4606+
value = PyObject_To_StackRef_Borrow(ptr);
45984607
}
45994608

46004609
tier2 pure op(_LOAD_CONST_INLINE_WITH_NULL, (ptr/4 -- value, null)) {
4601-
value = Py_NewRef(ptr);
4610+
value = PyObject_To_StackRef_New(ptr);
46024611
null = Py_STACKREF_NULL;
46034612
}
46044613

46054614
tier2 pure op(_LOAD_CONST_INLINE_BORROW_WITH_NULL, (ptr/4 -- value, null)) {
4606-
value = ptr;
4615+
value = PyObject_To_StackRef_Borrow(ptr);
46074616
null = Py_STACKREF_NULL;
46084617
}
46094618

@@ -4614,7 +4623,7 @@ dummy_func(
46144623

46154624
/* Internal -- for testing executors */
46164625
op(_INTERNAL_INCREMENT_OPT_COUNTER, (opt --)) {
4617-
_PyCounterOptimizerObject *exe = (_PyCounterOptimizerObject *)opt;
4626+
_PyCounterOptimizerObject *exe = (_PyCounterOptimizerObject *)PyStackRef_To_PyObject_Borrow(opt);
46184627
exe->count++;
46194628
}
46204629

0 commit comments

Comments
 (0)
0