summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/offlineasm/mips.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/offlineasm/mips.rb')
-rw-r--r--Source/JavaScriptCore/offlineasm/mips.rb34
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