WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
99706
MIPS LLInt implementation.
https://bugs.webkit.org/show_bug.cgi?id=99706
Summary
MIPS LLInt implementation.
Balazs Kilvady
Reported
2012-10-18 04:03:12 PDT
LLInt implementation for MIPS.
Attachments
LLInt implementation for MIPS.
(62.81 KB, patch)
2012-10-18 04:27 PDT
,
Balazs Kilvady
webkit-ews
: commit-queue-
Details
Formatted Diff
Diff
LLInt implementation for MIPS.
(62.82 KB, patch)
2012-10-18 05:03 PDT
,
Balazs Kilvady
fpizlo
: review-
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(56.63 KB, patch)
2012-10-27 01:42 PDT
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(56.30 KB, patch)
2012-11-05 06:32 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(21.17 KB, patch)
2012-11-08 11:55 PST
,
Balazs Kilvady
webkit-ews
: commit-queue-
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(56.36 KB, patch)
2012-11-08 12:22 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(57.33 KB, patch)
2012-11-14 04:24 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(56.31 KB, patch)
2012-11-14 09:13 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS using risc.rb.
(56.33 KB, patch)
2012-11-27 09:56 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS reusing risc.rb.
(56.38 KB, patch)
2012-12-17 09:20 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS reusing risc.rb.
(56.05 KB, patch)
2012-12-18 04:11 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
LLInt implementation for MIPS reusing risc.rb.
(55.34 KB, patch)
2013-01-04 09:18 PST
,
Balazs Kilvady
fpizlo
: review+
Details
Formatted Diff
Diff
LLInt implementation for MIPS reusing risc.rb.
(50.57 KB, patch)
2013-01-07 10:50 PST
,
Balazs Kilvady
no flags
Details
Formatted Diff
Diff
Show Obsolete
(12)
View All
Add attachment
proposed patch, testcase, etc.
Balazs Kilvady
Comment 1
2012-10-18 04:27:00 PDT
Created
attachment 169391
[details]
LLInt implementation for MIPS.
WebKit Review Bot
Comment 2
2012-10-18 04:29:00 PDT
Attachment 169391
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1569: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 3
2012-10-18 04:38:07 PDT
Tools/Scripts/check-webkit-style reports: Source/JavaScriptCore/dfg/DFGOperations.cpp:1569: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] That's an asm(…) part of the file and I haven't found any asm(..) related style-guide and just followed other architectures' coding style.
Early Warning System Bot
Comment 4
2012-10-18 04:51:04 PDT
Comment on
attachment 169391
[details]
LLInt implementation for MIPS.
Attachment 169391
[details]
did not pass qt-ews (qt): Output:
http://queues.webkit.org/results/14412526
Build Bot
Comment 5
2012-10-18 04:55:02 PDT
Comment on
attachment 169391
[details]
LLInt implementation for MIPS.
Attachment 169391
[details]
did not pass mac-ews (mac): Output:
http://queues.webkit.org/results/14455041
Balazs Kilvady
Comment 6
2012-10-18 05:03:43 PDT
Created
attachment 169392
[details]
LLInt implementation for MIPS. #if macro fix.
WebKit Review Bot
Comment 7
2012-10-18 06:06:02 PDT
Attachment 169392
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1569: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
Oliver Hunt
Comment 8
2012-10-18 09:57:24 PDT
Comment on
attachment 169392
[details]
LLInt implementation for MIPS. View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
r=me, but it would be nice if you could respond to my comments :D
> Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h:126 > + ".set noreorder\n" \
Quick question, what does this do? Disable instruction reordering, or disable function reordering - LLInt should be safe against function reordering so if it's the latter this is probably unnecessary. If it's not then just ignore me :D
> Source/JavaScriptCore/llint/LowLevelInterpreter.asm:163 > + move sourceRegister, lr
I feel that we should just have if C_LOOP or ARMv7 or MIPS move sourceRegister, lr elsif X86 or X86_64 ... else error end
Balazs Kilvady
Comment 9
2012-10-18 10:12:20 PDT
(In reply to
comment #8
)
> (From update of
attachment 169392
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > r=me, but it would be nice if you could respond to my comments :D > > > Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h:126 > > + ".set noreorder\n" \ > > Quick question, what does this do? Disable instruction reordering, or disable function reordering - LLInt should be safe against function reordering so if it's the latter this is probably unnecessary. If it's not then just ignore me :D
This macro turns off gas' optimization of instruction reordering and must be used around .cpload macro which is necessary for PIC compatibility.
> > > Source/JavaScriptCore/llint/LowLevelInterpreter.asm:163 > > + move sourceRegister, lr > > I feel that we should just have > if C_LOOP or ARMv7 or MIPS > move sourceRegister, lr > elsif X86 or X86_64 > ... > else > error > end
Could be. Should I make a new patch with this modification?
Oliver Hunt
Comment 10
2012-10-18 10:53:34 PDT
(In reply to
comment #9
)
> (In reply to
comment #8
) > > (From update of
attachment 169392
[details]
[details]) > > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > > r=me, but it would be nice if you could respond to my comments :D > > > > > Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h:126 > > > + ".set noreorder\n" \ > > > > Quick question, what does this do? Disable instruction reordering, or disable function reordering - LLInt should be safe against function reordering so if it's the latter this is probably unnecessary. If it's not then just ignore me :D > > This macro turns off gas' optimization of instruction reordering and must be used around .cpload macro which is necessary for PIC compatibility.
Righto
> > > > > > Source/JavaScriptCore/llint/LowLevelInterpreter.asm:163 > > > + move sourceRegister, lr > > > > I feel that we should just have > > if C_LOOP or ARMv7 or MIPS > > move sourceRegister, lr > > elsif X86 or X86_64 > > ... > > else > > error > > end > Could be. Should I make a new patch with this modification?
Nah, but maybe make the change as a followup?
Filip Pizlo
Comment 11
2012-10-18 10:53:44 PDT
Comment on
attachment 169392
[details]
LLInt implementation for MIPS. View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> Source/JavaScriptCore/offlineasm/mips.rb:190 > +def mipsLowerBranchOps(list)
Did you copy and paste all of this code? You should make an effort to reuse code rather than copy and pasting it.
Balazs Kilvady
Comment 12
2012-10-18 10:58:24 PDT
(In reply to
comment #10
)
> (In reply to
comment #9
) > > (In reply to
comment #8
) > > > (From update of
attachment 169392
[details]
[details] [details]) > > > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > > > > r=me, but it would be nice if you could respond to my comments :D > > > > > > > Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h:126 > > > > + ".set noreorder\n" \ > > > > > > Quick question, what does this do? Disable instruction reordering, or disable function reordering - LLInt should be safe against function reordering so if it's the latter this is probably unnecessary. If it's not then just ignore me :D > > > > This macro turns off gas' optimization of instruction reordering and must be used around .cpload macro which is necessary for PIC compatibility. > > Righto > > > > > > > > > > Source/JavaScriptCore/llint/LowLevelInterpreter.asm:163 > > > > + move sourceRegister, lr > > > > > > I feel that we should just have > > > if C_LOOP or ARMv7 or MIPS > > > move sourceRegister, lr > > > elsif X86 or X86_64 > > > ... > > > else > > > error > > > end > > Could be. Should I make a new patch with this modification? > > Nah, but maybe make the change as a followup?
OK for me if you accept the change :)
Balazs Kilvady
Comment 13
2012-10-18 11:09:07 PDT
(In reply to
comment #11
)
> (From update of
attachment 169392
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > Source/JavaScriptCore/offlineasm/mips.rb:190 > > +def mipsLowerBranchOps(list) > > Did you copy and paste all of this code? > > You should make an effort to reuse code rather than copy and pasting it.
What you mean? I started from a copy of the armv7 implementation and I can't see how could there be more code reusing. Could you give me more details?
Filip Pizlo
Comment 14
2012-10-18 11:23:23 PDT
Comment on
attachment 169392
[details]
LLInt implementation for MIPS. View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
You should move lowering phases that are identical into a separate file. If they are almost identical except for some constant, then the phase should take a constant as an argument. If two phases just have some lowering in common but others are different (like lowering of branch ops for bmul) then you can split the phase in two - one phase for just bmul, which is common, and another phase for the rest, which is separate.
> Source/JavaScriptCore/offlineasm/mips.rb:278 > + when "bmulio" > + tmp1 = Tmp.new(node.codeOrigin, :gpr) > + tmp2 = Tmp.new(node.codeOrigin, :gpr) > + newList << Instruction.new(node.codeOrigin, "smulli", [node.operands[0], node.operands[1], node.operands[1], tmp1]) > + newList << Instruction.new(node.codeOrigin, "rshifti", [node.operands[-2], Immediate.new(node.codeOrigin, 31), tmp2]) > + newList << Instruction.new(node.codeOrigin, "bineq", [tmp1, tmp2, node.operands[-1]]) > + when /^bmuli/ > + condition = $~.post_match > + newList << Instruction.new(node.codeOrigin, "muli", node.operands[0..-2]) > + newList << Instruction.new(node.codeOrigin, "bti" + condition, [node.operands[-2], node.operands[-1]])
This is identical to the cases in armV7LowerBranchOps.
> Source/JavaScriptCore/offlineasm/mips.rb:357 > +def mipsSanitizeShift(operand, list) > + return operand if operand.immediate? > + > + tmp = Tmp.new(operand.codeOrigin, :gpr) > + list << Instruction.new(operand.codeOrigin, "andi", [operand, Immediate.new(operand.codeOrigin, 31), tmp]) > + tmp > +end > + > +def mipsLowerShiftOps(list) > + newList = [] > + list.each { > + | node | > + if node.is_a? Instruction > + case node.opcode > + when "lshifti", "rshifti", "urshifti", "lshiftp", "rshiftp", "urshiftp" > + if node.operands.size == 2 > + newList << Instruction.new(node.codeOrigin, node.opcode, [mipsSanitizeShift(node.operands[0], newList), node.operands[1]]) > + else > + newList << Instruction.new(node.codeOrigin, node.opcode, [node.operands[0], mipsSanitizeShift(node.operands[1], newList), node.operands[2]]) > + raise "Wrong number of operands for shift at #{node.codeOriginString}" unless node.operands.size == 3 > + end > + else > + newList << node > + end > + else > + newList << node > + end > + } > + newList > +end
This is identical to armv7SanitizeShift
> Source/JavaScriptCore/offlineasm/mips.rb:392 > +class Node > + def mipsLowerMalformedAddressesRecurse(list) > + mapChildren { > + | node | > + node.mipsLowerMalformedAddressesRecurse(list) > + } > + end > +end > + > +class Address > + def mipsLowerMalformedAddressesRecurse(list) > + if offset.value < -0xffff or offset.value > 0xffff > + tmp = Tmp.new(codeOrigin, :gpr) > + list << Instruction.new(codeOrigin, "move", [offset, tmp]) > + list << Instruction.new(codeOrigin, "addp", [base, tmp]) > + Address.new(codeOrigin, tmp, Immediate.new(codeOrigin, 0)) > + else > + self > + end > + end > +end > +
This is identical to armV7LowerMalformedAddressesRecurse except for the acceptable range.
> Source/JavaScriptCore/offlineasm/mips.rb:398 > + if scaleShift == 0 > + tmp0 = Tmp.new(codeOrigin, :gpr) > + list << Instruction.new(codeOrigin, "addp", [base, index, tmp0]) > + Address.new(codeOrigin, tmp0, Immediate.new(codeOrigin, offset.value));
scaleShift will never be 0.
> Source/JavaScriptCore/offlineasm/mips.rb:423 > +class AbsoluteAddress > + def mipsLowerMalformedAddressesRecurse(list) > + tmp = Tmp.new(codeOrigin, :gpr) > + list << Instruction.new(codeOrigin, "move", [address, tmp]) > + Address.new(codeOrigin, tmp, Immediate.new(codeOrigin, 0)) > + end > +end > + > +def mipsLowerMalformedAddresses(list) > + newList = [] > + list.each { > + | node | > + newList << node.mipsLowerMalformedAddressesRecurse(newList) > + } > + newList > +end
This is identical to armV7LowerMalformedAddresses
> Source/JavaScriptCore/offlineasm/mips.rb:468 > +class Node > + def mipsDoubleAddress(list) > + self > + end > +end > + > +class BaseIndex > + def mipsDoubleAddress(list) > + tmp = Tmp.new(codeOrigin, :gpr) > + list << Instruction.new(codeOrigin, "leap", [self, tmp]) > + Address.new(codeOrigin, tmp, Immediate.new(codeOrigin, 0)) > + end > +end > + > +def mipsLowerMalformedAddressesDouble(list) > + newList = [] > + list.each { > + | node | > + if node.is_a? Instruction > + case node.opcode > + when "loadd" > + newList << Instruction.new(node.codeOrigin, "loadd", [node.operands[0].mipsDoubleAddress(newList), node.operands[1]]) > + when "stored" > + newList << Instruction.new(node.codeOrigin, "stored", [node.operands[0], node.operands[1].mipsDoubleAddress(newList)]) > + else > + newList << node > + end > + else > + newList << node > + end > + } > + newList > +end
You don't need this, if on MIPS you're always lowering BaseIndex anyway.
> Source/JavaScriptCore/offlineasm/mips.rb:571 > +class Node > + def mipsLowerMalformedImmediatesRecurse(list) > + mapChildren { > + | node | > + node.mipsLowerMalformedImmediatesRecurse(list) > + } > + end > +end > + > +class Address > + def mipsLowerMalformedImmediatesRecurse(list) > + self > + end > +end > + > +class BaseIndex > + def mipsLowerMalformedImmediatesRecurse(list) > + self > + end > +end > + > +class AbsoluteAddress > + def mipsLowerMalformedImmediatesRecurse(list) > + self > + end > +end > + > +class Immediate > + def mipsLowerMalformedImmediatesRecurse(list) > + if value < -0xffff or value > 0xffff > + tmp = Tmp.new(codeOrigin, :gpr) > + list << Instruction.new(codeOrigin, "move", [self, tmp]) > + tmp
This whole swath of code is identical to armV7LowerMalformedImmediates
> Source/JavaScriptCore/offlineasm/mips.rb:654 > +def mipsAsRegister(preList, postList, operand, suffix, needStore) > + return operand unless operand.address? > + > + tmp = Tmp.new(operand.codeOrigin, if suffix == "d" then :fpr else :gpr end) > + preList << Instruction.new(operand.codeOrigin, "load" + suffix, [operand, tmp]) > + if needStore > + postList << Instruction.new(operand.codeOrigin, "store" + suffix, [tmp, operand]) > + end > + tmp > +end > + > +def mipsAsRegisters(preList, postList, operands, suffix) > + newOperands = [] > + operands.each_with_index { > + | operand, index | > + newOperands << mipsAsRegister(preList, postList, operand, suffix, index == operands.size - 1) > + } > + newOperands > +end > + > +def mipsLowerMisplacedAddresses(list) > + newList = [] > + list.each { > + | node | > + if node.is_a? Instruction > + postInstructions = [] > + case node.opcode > + when "addi", "addp", "addis", "andi", "andp", "lshifti", "lshiftp", "muli", "mulp", "negi", > + "negp", "noti", "ori", "oris", "orp", "rshifti", "urshifti", "rshiftp", "urshiftp", "subi", > + "subp", "subis", "xori", "xorp", /^bi/, /^bp/, /^bti/, /^btp/, /^ci/, /^cp/, /^ti/ > + newList << Instruction.new(node.codeOrigin, > + node.opcode, > + mipsAsRegisters(newList, postInstructions, node.operands, "i")) > + when "bbeq", "bbneq", "bba", "bbaeq", "bbb", "bbbeq", "btbo", "btbz", "btbnz", "tbz", "tbnz", > + "tbo", "cbeq", "cbneq", "cba", "cbaeq", "cbb", "cbbeq" > + newList << Instruction.new(node.codeOrigin, > + node.opcode, > + mipsAsRegisters(newList, postInstructions, node.operands, "b"))
Again, this looks identical to armV7LowerMisplacedAddresses
> Source/JavaScriptCore/offlineasm/mips.rb:768 > +def mipsLowerRegisterReuse(list) > + newList = [] > + list.each { > + | node | > + if node.is_a? Instruction > + case node.opcode > + when "cieq", "cineq", "cia", "ciaeq", "cib", "cibeq", "cigt", "cigteq", "cilt", "cilteq", > + "cpeq", "cpneq", "cpa", "cpaeq", "cpb", "cpbeq", "cpgt", "cpgteq", "cplt", "cplteq", > + "tio", "tis", "tiz", "tinz", "tbo", "tbs", "tbz", "tbnz", "tpo", "tps", "tpz", "tpnz", > + "cbeq", "cbneq", "cba", "cbaeq", "cbb", "cbbeq", "cbgt", "cbgteq", "cblt", "cblteq" > + if node.operands.size == 2 > + if node.operands[0] == node.operands[1] > + tmp = Tmp.new(node.codeOrigin, :gpr) > + newList << Instruction.new(node.codeOrigin, "move", [node.operands[0], tmp]) > + newList << Instruction.new(node.codeOrigin, node.opcode, [tmp, node.operands[1]]) > + else > + newList << node > + end > + else > + raise "Wrong number of arguments at #{node.codeOriginString}" unless node.operands.size == 3 > + if node.operands[0] == node.operands[2] > + tmp = Tmp.new(node.codeOrigin, :gpr) > + newList << Instruction.new(node.codeOrigin, "move", [node.operands[0], tmp]) > + newList << Instruction.new(node.codeOrigin, node.opcode, [tmp, node.operands[1], node.operands[2]]) > + elsif node.operands[1] == node.operands[2] > + tmp = Tmp.new(node.codeOrigin, :gpr) > + newList << Instruction.new(node.codeOrigin, "move", [node.operands[1], tmp]) > + newList << Instruction.new(node.codeOrigin, node.opcode, [node.operands[0], tmp, node.operands[2]]) > + else > + newList << node > + end > + end > + else > + newList << node > + end > + else > + newList << node > + end > + } > + newList
Again! Identical to armV7LowerRegisterReuse!
Filip Pizlo
Comment 15
2012-10-18 12:06:43 PDT
(In reply to
comment #13
)
> (In reply to
comment #11
) > > (From update of
attachment 169392
[details]
[details]) > > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > > > Source/JavaScriptCore/offlineasm/mips.rb:190 > > > +def mipsLowerBranchOps(list) > > > > Did you copy and paste all of this code? > > > > You should make an effort to reuse code rather than copy and pasting it. > > What you mean? I started from a copy of the armv7 implementation and I can't see how could there be more code reusing. Could you give me more details?
I've created a bug for this:
https://bugs.webkit.org/show_bug.cgi?id=99745
I have a pretty good idea of how I'd like this to work, so that the code is more maintainable in the future. I'll try to hack something up.
Filip Pizlo
Comment 16
2012-10-20 13:09:37 PDT
(In reply to
comment #15
)
> (In reply to
comment #13
) > > (In reply to
comment #11
) > > > (From update of
attachment 169392
[details]
[details] [details]) > > > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > > > > > Source/JavaScriptCore/offlineasm/mips.rb:190 > > > > +def mipsLowerBranchOps(list) > > > > > > Did you copy and paste all of this code? > > > > > > You should make an effort to reuse code rather than copy and pasting it. > > > > What you mean? I started from a copy of the armv7 implementation and I can't see how could there be more code reusing. Could you give me more details? > > I've created a bug for this:
https://bugs.webkit.org/show_bug.cgi?id=99745
> > I have a pretty good idea of how I'd like this to work, so that the code is more maintainable in the future. I'll try to hack something up.
This is landed in
http://trac.webkit.org/changeset/131989
Do you guys think you can redo the MIPS backend around the common things in risc.rb? Feel free to refactor risc.rb further if you need to. Remember, this code isn't performance-critical so you can have as many little phases as is convenient. The only requirements are (a) correctness (obviously) and (b) generating decent code in the end.
Balazs Kilvady
Comment 17
2012-10-22 03:17:21 PDT
(In reply to
comment #16
)
> (In reply to
comment #15
) > > (In reply to
comment #13
) > > > (In reply to
comment #11
) > > > > (From update of
attachment 169392
[details]
[details] [details] [details]) > > > > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > > > > > > > Source/JavaScriptCore/offlineasm/mips.rb:190 > > > > > +def mipsLowerBranchOps(list) > > > > > > > > Did you copy and paste all of this code? > > > > > > > > You should make an effort to reuse code rather than copy and pasting it. > > > > > > What you mean? I started from a copy of the armv7 implementation and I can't see how could there be more code reusing. Could you give me more details? > > > > I've created a bug for this:
https://bugs.webkit.org/show_bug.cgi?id=99745
> > > > I have a pretty good idea of how I'd like this to work, so that the code is more maintainable in the future. I'll try to hack something up. > > This is landed in
http://trac.webkit.org/changeset/131989
> > Do you guys think you can redo the MIPS backend around the common things in risc.rb? > > Feel free to refactor risc.rb further if you need to. Remember, this code isn't performance-critical so you can have as many little phases as is convenient. The only requirements are (a) correctness (obviously) and (b) generating decent code in the end.
Sure. We can (re)do it. Will be nice and decent :) Thank's for the initial implementation of risc.rb.
Balazs Kilvady
Comment 18
2012-10-24 11:31:31 PDT
(In reply to
comment #14
)
> (From update of
attachment 169392
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=169392&action=review
> > > Source/JavaScriptCore/offlineasm/mips.rb:398 > > + if scaleShift == 0 > > + tmp0 = Tmp.new(codeOrigin, :gpr) > > + list << Instruction.new(codeOrigin, "addp", [base, index, tmp0]) > > + Address.new(codeOrigin, tmp0, Immediate.new(codeOrigin, offset.value)); > > scaleShift will never be 0.
There is 0 scaleShift so I would like to keep that checking. For example at LowLevelInterpreter.asm:602: loadp VectorBufferOffset[scratch, dest, 1], dest The generated armv7 code: "\tmovw r9, #4\n" "\tadd r9, r1\n" "\tldr r0, [r9, r0, lsl #0]\n" The mips equivalent is (without scaleShift == 0 check): "\tsll $t7, $v0, 0\n" "\taddu $t7, $t7, $v1\n" "\tlw $v0, 4($t7)\n" And on mips with scaleShift checking: "\taddu $t7, $v1, $v0\n" "\tlw $v0, 4($t7)\n" Both (with or without scaleShift checking) passes Tools/Scripts/run-javascriptcore-tests. I guess 2^0 == 1 so scale == 1; scaleShift == 0; As ast.rb has: def scaleShift case scale when 1 0 when 2 1 when 4 2 when 8 3 else raise "Bad scale at #{codeOriginString}" end end
Balazs Kilvady
Comment 19
2012-10-27 01:42:20 PDT
Created
attachment 171085
[details]
LLInt implementation for MIPS using risc.rb.
WebKit Review Bot
Comment 20
2012-10-27 01:45:09 PDT
Attachment 171085
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1576: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 21
2012-10-31 08:02:27 PDT
Would someone be so kind to review the last patch?
Balazs Kilvady
Comment 22
2012-11-05 06:32:46 PST
Created
attachment 172328
[details]
LLInt implementation for MIPS using risc.rb. Slightly modified version with Oliver's suggestion.
WebKit Review Bot
Comment 23
2012-11-05 06:41:12 PST
Attachment 172328
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1576: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 24
2012-11-08 11:55:01 PST
Created
attachment 173086
[details]
LLInt implementation for MIPS using risc.rb. Rebased.
WebKit Review Bot
Comment 25
2012-11-08 11:57:44 PST
Attachment 173086
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1575: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 14 files If any of these errors are false positives, please file a bug against check-webkit-style.
Early Warning System Bot
Comment 26
2012-11-08 12:01:41 PST
Comment on
attachment 173086
[details]
LLInt implementation for MIPS using risc.rb.
Attachment 173086
[details]
did not pass qt-ews (qt): Output:
http://queues.webkit.org/results/14759919
Early Warning System Bot
Comment 27
2012-11-08 12:03:49 PST
Comment on
attachment 173086
[details]
LLInt implementation for MIPS using risc.rb.
Attachment 173086
[details]
did not pass qt-wk2-ews (qt): Output:
http://queues.webkit.org/results/14779007
EFL EWS Bot
Comment 28
2012-11-08 12:06:40 PST
Comment on
attachment 173086
[details]
LLInt implementation for MIPS using risc.rb.
Attachment 173086
[details]
did not pass efl-ews (efl): Output:
http://queues.webkit.org/results/14759920
Balazs Kilvady
Comment 29
2012-11-08 12:22:18 PST
Created
attachment 173091
[details]
LLInt implementation for MIPS using risc.rb. Rebased.
WebKit Review Bot
Comment 30
2012-11-08 12:25:01 PST
Attachment 173091
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1575: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Chao-ying Fu
Comment 31
2012-11-09 14:28:40 PST
Hi Oliver, Filip, Is there status update or any concern about this patch? Thank a lot! Regards, Chao-ying
Balazs Kilvady
Comment 32
2012-11-14 04:24:14 PST
Created
attachment 174127
[details]
LLInt implementation for MIPS using risc.rb.
WebKit Review Bot
Comment 33
2012-11-14 04:26:11 PST
Attachment 174127
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1624: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 34
2012-11-14 04:32:26 PST
Comment on
attachment 174127
[details]
LLInt implementation for MIPS using risc.rb. The style error comes from handling asm(…) code in cpp files. The patch of the
Bug 101367
can fix this problem.
Balazs Kilvady
Comment 35
2012-11-14 09:13:37 PST
Created
attachment 174176
[details]
LLInt implementation for MIPS using risc.rb. rebased.
Balazs Kilvady
Comment 36
2012-11-14 09:14:57 PST
Comment on
attachment 174176
[details]
LLInt implementation for MIPS using risc.rb. The style error comes from handling asm(…) code in cpp files. The patch of the
Bug 101367
can fix this problem.
WebKit Review Bot
Comment 37
2012-11-14 09:16:00 PST
Attachment 174176
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1626: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 38
2012-11-27 09:56:52 PST
Created
attachment 176290
[details]
LLInt implementation for MIPS using risc.rb.
WebKit Review Bot
Comment 39
2012-11-27 09:59:21 PST
Attachment 176290
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1676: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 40
2012-11-27 10:02:29 PST
Comment on
attachment 176290
[details]
LLInt implementation for MIPS using risc.rb. Rebased on
r135868
. The style error comes from handling asm(…) code in cpp files. The patch of the
Bug 101367
can fix this problem.
Balazs Kilvady
Comment 41
2012-12-17 09:20:24 PST
Created
attachment 179758
[details]
LLInt implementation for MIPS reusing risc.rb.
WebKit Review Bot
Comment 42
2012-12-17 09:23:32 PST
Attachment 179758
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1694: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 43
2012-12-17 09:24:15 PST
Comment on
attachment 179758
[details]
LLInt implementation for MIPS reusing risc.rb. Rebased on
r137913
Balazs Kilvady
Comment 44
2012-12-17 09:29:18 PST
(In reply to
comment #42
)
>
Attachment 179758
[details]
did not pass style-queue: > > Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 > Source/JavaScriptCore/dfg/DFGOperations.cpp:1694: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] > Total errors found: 1 in 15 files > > > If any of these errors are false positives, please file a bug against check-webkit-style.
The style error comes from handling asm (…) code in cpp files. The patch of the
Bug 101367
can fix this problem.
Balazs Kilvady
Comment 45
2012-12-18 04:11:34 PST
Created
attachment 179919
[details]
LLInt implementation for MIPS reusing risc.rb. JITStubs.cpp fix, rebased on
r138005
.
WebKit Review Bot
Comment 46
2012-12-18 04:13:50 PST
Attachment 179919
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1694: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Balazs Kilvady
Comment 47
2013-01-04 09:18:34 PST
Created
attachment 181313
[details]
LLInt implementation for MIPS reusing risc.rb.
Balazs Kilvady
Comment 48
2013-01-04 09:21:44 PST
Comment on
attachment 181313
[details]
LLInt implementation for MIPS reusing risc.rb. Rebased on
r138802
.
WebKit Review Bot
Comment 49
2013-01-04 09:22:20 PST
Attachment 181313
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1709: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Mark Lam
Comment 50
2013-01-04 13:25:39 PST
Comment on
attachment 181313
[details]
LLInt implementation for MIPS reusing risc.rb. View in context:
https://bugs.webkit.org/attachment.cgi?id=181313&action=review
> Source/JavaScriptCore/offlineasm/mips.rb:549 > + result = mipsLowerMisplacedAddressesSpecific(result)
I see that you split riscLowerMisplacedAddresses() into riscLowerMisplacedAddressesCommon() and riscLowerMisplacedAddressesSpecific(). It seems quite arbitrary which instruction is considered common and which is platform specific. I suggest you do the following instead: 1. Undo the common and specific split in risk.rb. 2. Refactor riscLowerMisplacedAddresses() to call a riscLowerMisplacedAddressesInInstruction() which actually does the "lowering" for a single instruction instead of a list of instructions. 3. In mips.rb, call a mipsLowerMisplacedAddresses() instead of riscLowerMisplacedAddresses(). 4. In mipsLowerMisplacedAddresses(), 3.1 Handle the instructions that are specific to mips i.e. overridden behavior. 3.2 For instructions that the mips port does not wish to override, call down to riscLowerMisplacedAddressesInInstruction() instead of doing the default "newList << node". With this approach, a platform specific port gets to override the instructions it cares about, and reuse the rest. And there is no need to determine ahead of time which instruction is common / specific. Can you do this refactor please? Other than that, everything else looks good to me. Thanks.
Filip Pizlo
Comment 51
2013-01-05 23:20:39 PST
Comment on
attachment 181313
[details]
LLInt implementation for MIPS reusing risc.rb. View in context:
https://bugs.webkit.org/attachment.cgi?id=181313&action=review
r=me, but either rename common/specific to something better or come up with a way of avoiding refactorings in risc.rb altogether.
> Source/JavaScriptCore/offlineasm/mips.rb:273 > + comp = node.opcode[1,1] == "b" ? "sltub" : "sltu"
I tend to like consistency; having one style that we stick to makes it easier to understand the code at a glance. So, I think it's valuable to stick to our space-after-comma convention throughout webkit. So I would write node.opcode[1, 1]. But I would like it even better if for this purpose we used node.opcode[1..1], which makes it more obvious what is going on. But what I would have liked even better is if you had simply said node.opcode[1] == ?b, which I believe is the more canonical Ruby way of testing the second character.
> Source/JavaScriptCore/offlineasm/mips.rb:379 > + tmp = SpecialRegister.new("$ra")
Any reason why you're not creating one singleton instance of SpecialRegister for each special register you need ($ra, $t9, etc)? That's what the other backends do, and it preserves the invariant that identity equality implies that it's the same register.
>> Source/JavaScriptCore/offlineasm/mips.rb:549 >> + result = mipsLowerMisplacedAddressesSpecific(result) > > I see that you split riscLowerMisplacedAddresses() into riscLowerMisplacedAddressesCommon() and riscLowerMisplacedAddressesSpecific(). It seems quite arbitrary which instruction is considered common and which is platform specific. I suggest you do the following instead: > > 1. Undo the common and specific split in risk.rb. > 2. Refactor riscLowerMisplacedAddresses() to call a riscLowerMisplacedAddressesInInstruction() which actually does the "lowering" for a single instruction instead of a list of instructions. > 3. In mips.rb, call a mipsLowerMisplacedAddresses() instead of riscLowerMisplacedAddresses(). > 4. In mipsLowerMisplacedAddresses(), > 3.1 Handle the instructions that are specific to mips i.e. overridden behavior. > 3.2 For instructions that the mips port does not wish to override, call down to riscLowerMisplacedAddressesInInstruction() instead of doing the default "newList << node". > > With this approach, a platform specific port gets to override the instructions it cares about, and reuse the rest. And there is no need to determine ahead of time which instruction is common / specific. Can you do this refactor please? > > Other than that, everything else looks good to me. Thanks.
I agree with Mark that your use of the terms "Common" and "Specific" is confusing. I don't know what "common" or "specific" means (seriously, I don't - they're really uninformative words and could mean anything). While the refactoring that Mark suggests would work, I would be happy with either of the following options: 1) Don't change risc.rb at all, and just call mipsLowerMisplacedAddressesSpecific before calling riskLowerMisplacedAddresses. Do you think you could make that work? It would clearly be less intrusive (which I like) but you don't have to go this route if you can't easily make it work. 2) Just use better names than "Common" and "Specific". Instead of "riscLowerMisplacedAddressesSpecific" I would say "riscLowerMisplacedAddressesForJumpsAndCalls". Instead of "riscLowerMisplacedAddressesCommon", I would say "riscLowerMisplacedAddressesForEverythingElse". "ForEverythingElse" has the benefit of alerting the person reading the code to the fact that there are other variants of riscLowerMisplacedAddresses that do things for some other types of instructions. It's better than "common" because there's no risk of people assuming that "common" subsumes "specific".
Balazs Kilvady
Comment 52
2013-01-07 10:50:14 PST
Created
attachment 181531
[details]
LLInt implementation for MIPS reusing risc.rb. Thank you for the reviews. I think I managed to add all the requested modifications.
WebKit Review Bot
Comment 53
2013-01-07 10:53:35 PST
Attachment 181531
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1 Source/JavaScriptCore/dfg/DFGOperations.cpp:1709: The parameter name """" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 1 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
WebKit Review Bot
Comment 54
2013-01-07 11:41:32 PST
Comment on
attachment 181531
[details]
LLInt implementation for MIPS reusing risc.rb. Clearing flags on attachment: 181531 Committed
r138970
: <
http://trac.webkit.org/changeset/138970
>
WebKit Review Bot
Comment 55
2013-01-07 11:41:39 PST
All reviewed patches have been landed. Closing bug.
Balazs Kilvady
Comment 56
2013-03-12 09:49:56 PDT
***
Bug 101793
has been marked as a duplicate of this bug. ***
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug