From f32c6ff18c29e41f1dbdfc9218e38c2d10c7cdbe Mon Sep 17 00:00:00 2001 From: ChrisG Date: Sat, 4 May 2024 14:41:15 +0100 Subject: [PATCH 1/2] put the logic for printing memory accesses into a helper method --- xdsl/dialects/x86/ops.py | 100 +++++++++++---------------------------- 1 file changed, 28 insertions(+), 72 deletions(-) diff --git a/xdsl/dialects/x86/ops.py b/xdsl/dialects/x86/ops.py index 9639a8dcf7..baaf51ece6 100644 --- a/xdsl/dialects/x86/ops.py +++ b/xdsl/dialects/x86/ops.py @@ -490,7 +490,9 @@ def __init__( ) def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: - return self.r1, self.r2 + memory_access = _memory_access_str(self.r2, self.offset) + destination = _assembly_arg_str(self.r1) + return (destination, memory_access) @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -508,27 +510,6 @@ def custom_print_attributes(self, printer: Printer) -> Set[str]: _print_immediate_value(printer, self.offset) return {"offset"} - def assembly_line(self) -> str | None: - instruction_name = self.assembly_instruction_name() - destination = _assembly_arg_str(self.r1) - source = _assembly_arg_str(self.r2) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - return _assembly_line( - instruction_name, - f"{destination}, [{source}+{offset}]", - self.comment, - ) - else: - return _assembly_line( - instruction_name, f"{destination}, [{source}{offset}]", self.comment - ) - else: - return _assembly_line( - instruction_name, f"{destination}, [{source}]", self.comment - ) - @irdl_op_definition class RM_AddOp(RMOperation[GeneralRegisterType, GeneralRegisterType]): @@ -758,16 +739,8 @@ def __init__( ) def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: - destination = _assembly_arg_str(self.r1) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - destination = f"[{destination}+{offset}]" - else: - destination = f"[{destination}{offset}]" - else: - destination = f"[{destination}]" - return destination, self.r2 + memory_access = _memory_access_str(self.r1, self.offset) + return memory_access, self.r2 @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -889,17 +862,9 @@ def __init__( ) def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: - destination = _assembly_arg_str(self.r1) immediate = _assembly_arg_str(self.immediate) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - destination = f"[{destination}+{offset}]" - else: - destination = f"[{destination}{offset}]" - else: - destination = f"[{destination}]" - return destination, immediate + memory_access = _memory_access_str(self.r1, self.offset) + return memory_access, immediate @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -1091,17 +1056,9 @@ def __init__( def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: destination = _assembly_arg_str(self.r1) - source = _assembly_arg_str(self.r2) immediate = _assembly_arg_str(self.immediate) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - source = f"[{source}+{offset}]" - else: - source = f"[{source}{offset}]" - else: - source = f"[{source}]" - return destination, source, immediate + memory_access = _memory_access_str(self.r2, self.offset) + return destination, memory_access, immediate @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -1170,16 +1127,8 @@ def __init__( ) def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: - source = _assembly_arg_str(self.source) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - source = f"[{source}+{offset}]" - else: - source = f"[{source}{offset}]" - else: - source = f"[{source}]" - return (source,) + memory_access = _memory_access_str(self.source, self.offset) + return (memory_access,) @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -1228,16 +1177,8 @@ def __init__( ) def assembly_line_args(self) -> tuple[AssemblyInstructionArg | None, ...]: - source = _assembly_arg_str(self.source) - if self.offset is not None: - offset = _assembly_arg_str(self.offset) - if self.offset.value.data > 0: - source = f"[{source}+{offset}]" - else: - source = f"[{source}{offset}]" - else: - source = f"[{source}]" - return (source,) + memory_access = _memory_access_str(self.source, self.offset) + return (memory_access,) @classmethod def custom_parse_attributes(cls, parser: Parser) -> dict[str, Attribute]: @@ -1362,6 +1303,21 @@ def _print_immediate_value(printer: Printer, immediate: AnyIntegerAttr | LabelAt printer.print_string_literal(immediate.data) +def _memory_access_str( + register: AssemblyInstructionArg, offset: AssemblyInstructionArg | None +) -> str: + register = _assembly_arg_str(register) + if offset is not None: + temp = _assembly_arg_str(offset) + if offset.value.data > 0: + source = f"[{register}+{temp}]" + else: + source = f"[{register}{temp}]" + else: + source = f"[{register}]" + return source + + # endregion From 1cfd6eef3c9186a8c038d9dbf2a5aad9bf46d420 Mon Sep 17 00:00:00 2001 From: ChrisG Date: Sat, 4 May 2024 16:47:59 +0100 Subject: [PATCH 2/2] fix pyright issue --- xdsl/dialects/x86/ops.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xdsl/dialects/x86/ops.py b/xdsl/dialects/x86/ops.py index baaf51ece6..7f72676600 100644 --- a/xdsl/dialects/x86/ops.py +++ b/xdsl/dialects/x86/ops.py @@ -1304,18 +1304,18 @@ def _print_immediate_value(printer: Printer, immediate: AnyIntegerAttr | LabelAt def _memory_access_str( - register: AssemblyInstructionArg, offset: AssemblyInstructionArg | None + register: AssemblyInstructionArg, offset: AnyIntegerAttr | None ) -> str: - register = _assembly_arg_str(register) + register_str = _assembly_arg_str(register) if offset is not None: - temp = _assembly_arg_str(offset) + offset_str = _assembly_arg_str(offset) if offset.value.data > 0: - source = f"[{register}+{temp}]" + mem_acc_str = f"[{register_str}+{offset_str}]" else: - source = f"[{register}{temp}]" + mem_acc_str = f"[{register_str}{offset_str}]" else: - source = f"[{register}]" - return source + mem_acc_str = f"[{register_str}]" + return mem_acc_str # endregion