summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Python/bytecodes.c2
-rw-r--r--Python/ceval.c4
-rw-r--r--Python/generated_cases.c.h2
-rw-r--r--Python/optimizer.c18
4 files changed, 15 insertions, 11 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index f69ac2b..70b5239 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -2234,7 +2234,7 @@ dummy_func(
frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer);
if (frame == NULL) {
frame = cframe.current_frame;
- goto error;
+ goto resume_with_error;
}
assert(frame == cframe.current_frame);
here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) -1);
diff --git a/Python/ceval.c b/Python/ceval.c
index 6714229..0ee95bc 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2737,11 +2737,11 @@ _PyUopExecute(_PyExecutorObject *executor, _PyInterpreterFrame *frame, PyObject
#endif
DPRINTF(3,
- "Entering _PyUopExecute for %s (%s:%d) at offset %ld\n",
+ "Entering _PyUopExecute for %s (%s:%d) at byte offset %ld\n",
PyUnicode_AsUTF8(_PyFrame_GetCode(frame)->co_qualname),
PyUnicode_AsUTF8(_PyFrame_GetCode(frame)->co_filename),
_PyFrame_GetCode(frame)->co_firstlineno,
- (long)(frame->prev_instr + 1 -
+ 2 * (long)(frame->prev_instr + 1 -
(_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive));
PyThreadState *tstate = _PyThreadState_GET();
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index eb24229..6000ab2 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -3193,7 +3193,7 @@
frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer);
if (frame == NULL) {
frame = cframe.current_frame;
- goto error;
+ goto resume_with_error;
}
assert(frame == cframe.current_frame);
here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) -1);
diff --git a/Python/optimizer.c b/Python/optimizer.c
index c3ab649..2c1be61 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -181,6 +181,7 @@ _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNI
}
insert_executor(code, src, index, executor);
assert(frame->prev_instr == src);
+ frame->prev_instr = dest - 1;
return executor->execute(executor, frame, stack_pointer);
jump_to_destination:
frame->prev_instr = dest - 1;
@@ -201,7 +202,7 @@ PyUnstable_GetExecutor(PyCodeObject *code, int offset)
}
i += _PyInstruction_GetLength(code, i);
}
- PyErr_SetString(PyExc_ValueError, "no executor at given offset");
+ PyErr_SetString(PyExc_ValueError, "no executor at given byte offset");
return NULL;
}
@@ -373,6 +374,9 @@ translate_bytecode_to_trace(
_PyUOpInstruction *trace,
int max_length)
{
+#ifdef Py_DEBUG
+ _Py_CODEUNIT *initial_instr = instr;
+#endif
int trace_length = 0;
#ifdef Py_DEBUG
@@ -398,11 +402,11 @@ translate_bytecode_to_trace(
trace_length++;
DPRINTF(4,
- "Optimizing %s (%s:%d) at offset %ld\n",
+ "Optimizing %s (%s:%d) at byte offset %ld\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive));
for (;;) {
ADD_TO_TRACE(SAVE_IP, (int)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
@@ -492,21 +496,21 @@ done:
if (trace_length > 3) {
ADD_TO_TRACE(EXIT_TRACE, 0);
DPRINTF(1,
- "Created a trace for %s (%s:%d) at offset %ld -- length %d\n",
+ "Created a trace for %s (%s:%d) at byte offset %ld -- length %d\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive),
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive),
trace_length);
return trace_length;
}
else {
DPRINTF(4,
- "No trace for %s (%s:%d) at offset %ld\n",
+ "No trace for %s (%s:%d) at byte offset %ld\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive));
}
return 0;