}
tier1 no_save_ip inst(RECORD_PREVIOUS_INST, (--)) {
+#if _Py_TIER2
assert(IS_JIT_TRACING());
int opcode = next_instr->op.code;
int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr);
tstate->interp->jit_state.prev_instr_oparg = oparg;
tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL();
DISPATCH_GOTO_NON_TRACING();
+#else
+ Py_FatalError("JIT instruction executed in non-jit build.");
+#endif
}
///////// Tier-2 only opcodes /////////
#define TIER1_TO_TIER2(EXECUTOR) \
do { \
- LEAVE_TRACING(); \
OPT_STAT_INC(traces_executed); \
next_instr = _Py_jit_entry((EXECUTOR), frame, stack_pointer, tstate); \
frame = tstate->current_frame; \
TARGET(RECORD_PREVIOUS_INST) {
INSTRUCTION_STATS(RECORD_PREVIOUS_INST);
+ #if _Py_TIER2
assert(IS_JIT_TRACING());
int opcode = next_instr->op.code;
_PyFrame_SetStackPointer(frame, stack_pointer);
tstate->interp->jit_state.prev_instr_oparg = oparg;
tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL();
DISPATCH_GOTO_NON_TRACING();
+ #else
+ Py_FatalError("JIT instruction executed in non-jit build.");
+ #endif
}
TARGET(RERAISE) {
ADD_TO_TRACE(_JUMP_TO_TOP, 0, 0, 0);
goto done;
}
+ DPRINTF(2, "Trace continuing\n");
tstate->interp->jit_state.code_curr_size = trace_length;
tstate->interp->jit_state.code_max_size = max_length;
return 1;
done:
+ DPRINTF(2, "Trace done\n");
tstate->interp->jit_state.code_curr_size = trace_length;
tstate->interp->jit_state.code_max_size = max_length;
return 0;
full:
+ DPRINTF(2, "Trace full\n");
if (!is_terminator(&tstate->interp->jit_state.code_buffer[trace_length-1])) {
// Undo the last few instructions.
trace_length = tstate->interp->jit_state.code_curr_size;