int jump_taken);
void
-_PyJit_InitializeTracing(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *insert_exec_instr
+_PyJit_InitializeTracing(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *insert_exec_instr,
_Py_CODEUNIT *close_loop_instr, int curr_stackdepth, int chain_depth, _PyExitData *exit);
void _PyJit_FinalizeTracing(PyThreadState *tstate);
op(_RETURN_GENERATOR, ( -- res)) {
SYNC_SP();
+ PyCodeObject *co = get_current_code_object(ctx);
+ ctx->frame->stack_pointer = stack_pointer;
+ frame_pop(ctx);
stack_pointer = ctx->frame->stack_pointer;
res = sym_new_unknown(ctx);
- ctx->done = true;
- ctx->out_of_space = true;
+ /* Stack space handling */
+ assert(corresponding_check_stack == NULL);
+ assert(co != NULL);
+ int framesize = co->co_framesize;
+ assert(framesize > 0);
+ assert(framesize <= curr_space);
+ curr_space -= framesize;
}
op(_YIELD_VALUE, (unused -- value)) {
case _RETURN_GENERATOR: {
JitOptRef res;
+ PyCodeObject *co = get_current_code_object(ctx);
+ ctx->frame->stack_pointer = stack_pointer;
+ frame_pop(ctx);
stack_pointer = ctx->frame->stack_pointer;
res = sym_new_unknown(ctx);
- ctx->done = true;
- ctx->out_of_space = true;
+ assert(corresponding_check_stack == NULL);
+ assert(co != NULL);
+ int framesize = co->co_framesize;
+ assert(framesize > 0);
+ assert(framesize <= curr_space);
+ curr_space -= framesize;
stack_pointer[0] = res;
stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());