diff options
author | Balazs Kilvady <kilvadyb@homejinni.com> | 2013-02-01 22:00:00 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-23 13:39:19 +0200 |
commit | 765fd0c6ebdfbd1a0540211bc8b58e46076b41a3 (patch) | |
tree | 2cb4cbe7bc5d3e8e7ffb289c4fbe9418e3880e76 /Source/JavaScriptCore | |
parent | fee41053a81024e15303ebf68e6a9a029374ce92 (diff) | |
download | qtwebkit-765fd0c6ebdfbd1a0540211bc8b58e46076b41a3.tar.gz |
offlineasm BaseIndex handling is broken on ARM due to MIPS changes
https://bugs.webkit.org/show_bug.cgi?id=108261
Patch by Balazs Kilvady <kilvadyb@homejinni.com> 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 <allan.jensen@digia.com>
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'Source/JavaScriptCore')
-rw-r--r-- | Source/JavaScriptCore/ChangeLog | 12 | ||||
-rw-r--r-- | Source/JavaScriptCore/offlineasm/mips.rb | 34 | ||||
-rw-r--r-- | Source/JavaScriptCore/offlineasm/risc.rb | 4 |
3 files changed, 46 insertions, 4 deletions
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 <kilvadyb@homejinni.com> + + 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 <kilvadyb@homejinni.com> 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) |