summaryrefslogtreecommitdiffstats
path: root/Tools/cases_generator/instructions.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/cases_generator/instructions.py')
-rw-r--r--Tools/cases_generator/instructions.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/Tools/cases_generator/instructions.py b/Tools/cases_generator/instructions.py
index 6fbf7d9..5384bbe 100644
--- a/Tools/cases_generator/instructions.py
+++ b/Tools/cases_generator/instructions.py
@@ -144,7 +144,8 @@ class Instruction:
out: Formatter,
dedent: int,
active_caches: list[ActiveCacheEffect],
- tier: Tiers = TIER_ONE,
+ tier: Tiers,
+ family: parsing.Family | None,
) -> None:
"""Write the instruction body."""
# Write cache effect variable declarations and initializations
@@ -207,6 +208,14 @@ class Instruction:
)
else:
out.write_raw(f"{space}if ({cond}) goto {label};\n")
+ elif m := re.match(r"(\s*)DEOPT_IF\((.+)\);\s*(?://.*)?$", line):
+ space, cond = m.groups()
+ target = family.name if family else self.name
+ out.write_raw(f"{space}DEOPT_IF({cond}, {target});\n")
+ elif "DEOPT" in line:
+ filename = context.owner.filename
+ lineno = context.owner.tokens[context.begin].line
+ print(f"{filename}:{lineno}: ERROR: DEOPT_IF() must be all on one line")
elif m := re.match(r"(\s*)DECREF_INPUTS\(\);\s*(?://.*)?$", line):
out.reset_lineno()
space = extra + m.group(1)
@@ -244,7 +253,8 @@ class AbstractInstruction(Instruction):
out: Formatter,
dedent: int,
active_caches: list[ActiveCacheEffect],
- tier: Tiers = TIER_ONE,
+ tier: Tiers,
+ family: parsing.Family | None,
) -> None:
pass
@@ -268,7 +278,9 @@ class MacroInstruction:
macro: parsing.Macro
parts: MacroParts
cache_offset: int
+ # Set later
predicted: bool = False
+ family: parsing.Family | None = None
@dataclasses.dataclass