diff options
Diffstat (limited to 'Tools/cases_generator/generate_cases.py')
-rw-r--r-- | Tools/cases_generator/generate_cases.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 608df6b..4bd99b7 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -168,9 +168,14 @@ class Instruction: break self.unmoved_names = frozenset(unmoved_names) if self.register: - fmt = "IBBB" + num_regs = len(self.input_effects) + len(self.output_effects) + num_dummies = (num_regs // 2) * 2 + 1 - num_regs + fmt = "I" + "B"*num_regs + "X"*num_dummies else: - fmt = "IB" + if variable_used(inst.block, "oparg"): + fmt = "IB" + else: + fmt = "IX" cache = "C" for ce in self.cache_effects: for _ in range(ce.size): @@ -894,6 +899,11 @@ def always_exits(lines: list[str]) -> bool: ) +def variable_used(block: parser.Block, name: str) -> bool: + """Determine whether a variable with a given name is used in a block.""" + return any(token.kind == "IDENTIFIER" and token.text == name for token in block.tokens) + + def main(): """Parse command line, parse input, analyze, write output.""" args = arg_parser.parse_args() # Prints message and sys.exit(2) on error |