Revert "fix bug where pseudo-code assignments modify more than just the variable...
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 18 Oct 2023 20:24:04 +0000 (21:24 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 22 Dec 2023 19:26:21 +0000 (19:26 +0000)
This reverts commit 4e701a851536bba6648779c183293ba75e7ea7b8.

adding copy_assign_rhs was added without authorization or discussion and
is damaging the simulator

src/openpower/decoder/helpers.py
src/openpower/decoder/pseudo/parser.py
src/openpower/decoder/pseudo/pyfnwriter.py
src/openpower/decoder/pseudo/pywriter.py

index 2c93713484dbde0da0c774db94ef518df70888a3..99131c7fdb5457e8bc7bf5232e686e7e035d950b 100644 (file)
@@ -72,35 +72,6 @@ def EXTS128(value):
     return SelectableInt(exts(value.value, value.bits) & ((1 << 128)-1), 128)
 
 
-def copy_assign_rhs(inp):
-    """ implicitly added function call to all assignment RHSes.
-        This copies the passed-in value so later assignments to parts of the
-        LHS don't modify the RHS if it's a SelectableInt.
-
-        Example:
-        ```
-        # this needs to copy the SelectableInt instance in RA
-        # not just assign a reference to it to A
-        A <- RA
-        A[0] <- 1  # if the copy wasn't performed, we just modified RA too!
-        ```
-    """
-    if isinstance(inp, (str, int)):
-        return inp
-    if isinstance(inp, (SelectableInt, FieldSelectableInt)):
-        return SelectableInt(inp)
-    if isinstance(inp, BFPState):
-        return BFPState(inp)
-    if isinstance(inp, SelectableMSB0Fraction):
-        return SelectableMSB0Fraction(inp)
-    if isinstance(inp, tuple):
-        return tuple(map(copy_assign_rhs, inp))
-    if isinstance(inp, dict):
-        return {copy_assign_rhs(k): copy_assign_rhs(v) for k, v in inp.items()}
-    raise TypeError("tried to assign an unsupported type in pseudo-code",
-                    repr(type(inp)))
-
-
 # signed version of MUL
 def MULS(a, b):
     if isinstance(b, int):
index a618aec18fcacbe4e212e91093082f20e7309da6..00d49247c8212ccdd273fe6618b1eb4de28a4c24 100644 (file)
@@ -401,13 +401,7 @@ class PowerParser:
                     self.read_regs.add(toname)
             if name and name in self.gprs:
                 self.write_regs.add(name)  # add to list of regs to write
-
-            # copy rhs -- see openpower.decoder.helpers.copy_assign_rhs()'s
-            # documentation for why we need this
-            copy_fn = ast.Name("copy_assign_rhs", ast.Load())
-            rhs = ast.Call(copy_fn, (p[3],), [])
-            p[0] = self.Assign(autoassign, name, p[1], rhs, iea_mode,
-                               p.slice[2])
+            p[0] = Assign(autoassign, name, p[1], p[3], iea_mode)
             if name:
                 self.declared_vars.add(name)
 
index 417706a4df0af58f1be1af6c285998a3862a607e..448b3e345b89fae8bb33fb06df5d451ec5c748f6 100644 (file)
@@ -21,7 +21,7 @@ header = """\
 from openpower.decoder.isa.caller import inject
 from openpower.decoder.helpers import (ISACallerHelper,
                                  ne, eq, gt, ge, lt, le, ltu, gtu, length,
-                                 trunc_divs, trunc_rems, copy_assign_rhs,
+                                 trunc_divs, trunc_rems,
                                 )
 from openpower.decoder.selectable_int import SelectableInt
 from openpower.decoder.selectable_int import selectconcat as concat
index 6d436eef2f8f9877322bd6e91d2022f6c36a09b9..b0772935a86ca6af4e1c1dd3d43d11f2783f28d0 100644 (file)
@@ -23,7 +23,7 @@ header = """\
 from openpower.decoder.isa.caller import inject, instruction_info
 from openpower.decoder.helpers import (
                                  ne, eq, gt, ge, lt, le, ltu, gtu, length,
-                                 RANGE, copy_assign_rhs,
+                                 RANGE,
                                  ISACallerHelper,
                                 )
 from openpower.decoder.selectable_int import SelectableInt