diff options
Diffstat (limited to 'Source/JavaScriptCore/offlineasm/mips.rb')
-rw-r--r-- | Source/JavaScriptCore/offlineasm/mips.rb | 34 |
1 files changed, 32 insertions, 2 deletions
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 |