From 765fd0c6ebdfbd1a0540211bc8b58e46076b41a3 Mon Sep 17 00:00:00 2001 From: Balazs Kilvady Date: Fri, 1 Feb 2013 22:00:00 +0000 Subject: offlineasm BaseIndex handling is broken on ARM due to MIPS changes https://bugs.webkit.org/show_bug.cgi?id=108261 Patch by Balazs Kilvady on 2013-02-01 Reviewed by Filip Pizlo. offlineasm BaseIndex handling fix on MIPS. * offlineasm/mips.rb: * offlineasm/risc.rb: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@141641 268f45cc-cd09-0410-ab3c-d52691b4dbfc Conflicts: Source/JavaScriptCore/ChangeLog Source/JavaScriptCore/offlineasm/mips.rb Change-Id: I7ec4d500e11717e1cb2b6fd7f310e4e66cfa7955 Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Jocelyn Turcotte --- Source/JavaScriptCore/ChangeLog | 12 +++++++++++ Source/JavaScriptCore/offlineasm/mips.rb | 34 ++++++++++++++++++++++++++++++-- Source/JavaScriptCore/offlineasm/risc.rb | 4 ++-- 3 files changed, 46 insertions(+), 4 deletions(-) (limited to 'Source/JavaScriptCore') diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog index 4d5e69564..5b0cfcbb7 100644 --- a/Source/JavaScriptCore/ChangeLog +++ b/Source/JavaScriptCore/ChangeLog @@ -88,6 +88,18 @@ (JSC::ScratchBuffer::allocationSize): (ScratchBuffer): +2013-02-01 Balazs Kilvady + + offlineasm BaseIndex handling is broken on ARM due to MIPS changes + https://bugs.webkit.org/show_bug.cgi?id=108261 + + Reviewed by Filip Pizlo. + + offlineasm BaseIndex handling fix on MIPS. + + * offlineasm/mips.rb: + * offlineasm/risc.rb: + 2013-01-07 Balazs Kilvady MIPS LLInt implementation. diff --git a/Source/JavaScriptCore/offlineasm/mips.rb b/Source/JavaScriptCore/offlineasm/mips.rb index 80aa4fec7..3cb5ce81e 100644 --- a/Source/JavaScriptCore/offlineasm/mips.rb +++ b/Source/JavaScriptCore/offlineasm/mips.rb @@ -312,8 +312,23 @@ end # Specialization of lowering of malformed BaseIndex addresses. # +class Node + def mipsLowerMalformedAddressesRecurse(list, topLevelNode, &block) + mapChildren { + | subNode | + subNode.mipsLowerMalformedAddressesRecurse(list, topLevelNode, &block) + } + end +end + +class Address + def mipsLowerMalformedAddressesRecurse(list, node, &block) + riscLowerMalformedAddressesRecurse(list, node, &block) + end +end + class BaseIndex - def riscLowerMalformedAddressesRecurse(list, node, &block) + def mipsLowerMalformedAddressesRecurse(list, node, &block) if scaleShift == 0 tmp0 = Tmp.new(codeOrigin, :gpr) list << Instruction.new(codeOrigin, "addp", [base, index, tmp0]) @@ -327,6 +342,21 @@ class BaseIndex end end +class AbsoluteAddress + def mipsLowerMalformedAddressesRecurse(list, node, &block) + riscLowerMalformedAddressesRecurse(list, node, &block) + end +end + +def mipsLowerMalformedAddresses(list, &block) + newList = [] + list.each { + | node | + newList << node.mipsLowerMalformedAddressesRecurse(newList, node, &block) + } + newList +end + # # Lowering of misplaced immediates of MIPS specific instructions. For example: # @@ -532,7 +562,7 @@ class Sequence result = riscLowerSimpleBranchOps(result) result = riscLowerHardBranchOps(result) result = riscLowerShiftOps(result) - result = riscLowerMalformedAddresses(result) { + result = mipsLowerMalformedAddresses(result) { | node, address | if address.is_a? Address (-0xffff..0xffff).include? address.offset.value diff --git a/Source/JavaScriptCore/offlineasm/risc.rb b/Source/JavaScriptCore/offlineasm/risc.rb index 44b4dbd71..7408253af 100644 --- a/Source/JavaScriptCore/offlineasm/risc.rb +++ b/Source/JavaScriptCore/offlineasm/risc.rb @@ -187,7 +187,7 @@ class Node end class Address - def riscLowerMalformedAddressesRecurse(list, node) + def riscLowerMalformedAddressesRecurse(list, node, &block) return self if yield node, self tmp = Tmp.new(codeOrigin, :gpr) @@ -208,7 +208,7 @@ class BaseIndex end class AbsoluteAddress - def riscLowerMalformedAddressesRecurse(list, node) + def riscLowerMalformedAddressesRecurse(list, node, &block) return self if yield node, self tmp = Tmp.new(codeOrigin, :gpr) -- cgit v1.2.1