#endif
#define TIER_TWO 2
- #define OFFSET_OF_RETURN_VALUE ((frame->return_offset))
- #define OFFSET_OF_YIELD_VALUE ((1+INLINE_CACHE_ENTRIES_SEND))
- #define OFFSET_OF__PUSH_FRAME ((0))
- #define OFFSET_OF_RETURN_GENERATOR ((frame->return_offset))
case _NOP: {
break;
}
case _GUARD_IP__PUSH_FRAME: {
+ #define OFFSET_OF__PUSH_FRAME ((0))
PyObject *ip = (PyObject *)CURRENT_OPERAND0();
_Py_CODEUNIT *target = frame->instr_ptr + OFFSET_OF__PUSH_FRAME;
if (target != (_Py_CODEUNIT *)ip) {
}
case _GUARD_IP_YIELD_VALUE: {
+ #define OFFSET_OF_YIELD_VALUE ((1+INLINE_CACHE_ENTRIES_SEND))
PyObject *ip = (PyObject *)CURRENT_OPERAND0();
_Py_CODEUNIT *target = frame->instr_ptr + OFFSET_OF_YIELD_VALUE;
if (target != (_Py_CODEUNIT *)ip) {
}
case _GUARD_IP_RETURN_VALUE: {
+ #define OFFSET_OF_RETURN_VALUE ((frame->return_offset))
PyObject *ip = (PyObject *)CURRENT_OPERAND0();
_Py_CODEUNIT *target = frame->instr_ptr + OFFSET_OF_RETURN_VALUE;
if (target != (_Py_CODEUNIT *)ip) {
}
case _GUARD_IP_RETURN_GENERATOR: {
+ #define OFFSET_OF_RETURN_GENERATOR ((frame->return_offset))
PyObject *ip = (PyObject *)CURRENT_OPERAND0();
_Py_CODEUNIT *target = frame->instr_ptr + OFFSET_OF_RETURN_GENERATOR;
if (target != (_Py_CODEUNIT *)ip) {
out = CWriter(outfile, 2, lines)
emitter = Tier2Emitter(out, analysis.labels)
out.emit("\n")
- offset_strs: list[tuple[str, str]] = []
+ offset_strs: dict[str, tuple[str, str]] = {}
for name, uop in analysis.uops.items():
if not f"_GUARD_IP_{name}" in analysis.uops:
continue
offset_str = "".join(offset[1:])
found = True
assert offset_str
- out.emit(f"#define OFFSET_OF_{name} ({offset_str})\n")
- offset_strs.append((name, offset_str))
+ offset_strs[f"_GUARD_IP_{name}"] = (name, offset_str)
out.emit("\n")
out.emit(f"case {uop.name}: {{\n")
declare_variables(uop, out)
stack = Stack()
+ if name_offset_pair := offset_strs.get(name):
+ out.emit(f"#define OFFSET_OF_{name_offset_pair[0]} ({name_offset_pair[1]})\n")
stack = write_uop(uop, emitter, stack)
out.start_line()
if not uop.properties.always_exits:
out.emit("}")
out.emit("\n\n")
- for name, offset_str in offset_strs:
+ for name, offset_str in offset_strs.values():
out.emit(f"#undef OFFSET_OF{name}\n")
out.emit("\n")
outfile.write("#undef TIER_TWO\n")