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