Title: [286428] trunk/Source/_javascript_Core
Revision
286428
Author
commit-qu...@webkit.org
Date
2021-12-02 07:41:52 -0800 (Thu, 02 Dec 2021)

Log Message

[RISCV64] Fix effective address loading for LabelReferences with offsets
https://bugs.webkit.org/show_bug.cgi?id=233754

Patch by Zan Dobersek <zdober...@igalia.com> on 2021-12-02
Reviewed by Yusuke Suzuki.

r286345 (and subsequent change in r286372) introduced a load from a
label address with an additional offset. To properly handle this,
RISCV64 offlineasm generates the desired load-effective-address
instruction but now also generates an additional add instruction when
an offset value is present for that lea.

* offlineasm/riscv64.rb:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (286427 => 286428)


--- trunk/Source/_javascript_Core/ChangeLog	2021-12-02 15:34:01 UTC (rev 286427)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-12-02 15:41:52 UTC (rev 286428)
@@ -1,3 +1,18 @@
+2021-12-02  Zan Dobersek  <zdober...@igalia.com>
+
+        [RISCV64] Fix effective address loading for LabelReferences with offsets
+        https://bugs.webkit.org/show_bug.cgi?id=233754
+
+        Reviewed by Yusuke Suzuki.
+
+        r286345 (and subsequent change in r286372) introduced a load from a
+        label address with an additional offset. To properly handle this,
+        RISCV64 offlineasm generates the desired load-effective-address
+        instruction but now also generates an additional add instruction when
+        an offset value is present for that lea.
+
+        * offlineasm/riscv64.rb:
+
 2021-12-02  Geza Lore  <gl...@igalia.com>
 
         [JSC] Generated code size reductions for baseline JIT (all architectures)

Modified: trunk/Source/_javascript_Core/offlineasm/riscv64.rb (286427 => 286428)


--- trunk/Source/_javascript_Core/offlineasm/riscv64.rb	2021-12-02 15:34:01 UTC (rev 286427)
+++ trunk/Source/_javascript_Core/offlineasm/riscv64.rb	2021-12-02 15:41:52 UTC (rev 286428)
@@ -1464,6 +1464,41 @@
     end
 end
 
+def riscv64LowerLabelReferences(list)
+    newList = []
+    list.each {
+        | node |
+        if node.is_a? Instruction
+            case node.opcode
+            when "leap", "leaq"
+                labelRef = node.operands[0]
+                if labelRef.is_a? LabelReference
+                    dest = node.operands[1]
+                    newList << Instruction.new(codeOrigin, node.opcode, [LabelReference.new(node.codeOrigin, labelRef.label), dest])
+                    if labelRef.offset != 0
+                        newList << Instruction.new(codeOrigin, "addp", [dest, Immediate.new(node.codeOrigin, labelRef.offset), dest])
+                    end
+                else
+                    newList << node
+                end
+            else
+                newList << node
+            end
+        else
+            newList << node
+        end
+    }
+    newList
+end
+
+class Sequence
+    def getModifiedListRISCV64
+        result = @list
+        result = riscv64LowerLabelReferences(result)
+        return result
+    end
+end
+
 class Instruction
     def lowerRISCV64
         case opcode
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to