Florian, I addressed your comments and ported this to arm and x64.
On x64 I did a mini refactoring of the way constant operands are pushed. Having
a method that pushed both tagged and untagged values seemed unsafe. (We discussed this with Slava). Lasse, it'd be great if you could have a look. Thanks, Vitaly http://codereview.chromium.org/6852015/diff/1/src/ia32/lithium-ia32.cc File src/ia32/lithium-ia32.cc (right): http://codereview.chromium.org/6852015/diff/1/src/ia32/lithium-ia32.cc#newcode2006 src/ia32/lithium-ia32.cc:2006: LOperand* left = UseOrConstant(instr->left()); On 2011/04/14 10:26:47, fschneider wrote:
This should be UseOrConstantAtStart. Otherwise we can't allocate a
register if
available since all are blocked because of the call.
Done. http://codereview.chromium.org/6852015/diff/1/src/ic.cc File src/ic.cc (right): http://codereview.chromium.org/6852015/diff/1/src/ic.cc#newcode2029 src/ic.cc:2029: } On 2011/04/14 10:26:47, fschneider wrote:
I think this is correct. Personally I like the approach better where
we setup
the enum values in a way so that join becomes a & operator. Maybe that
would be
a refactoring to do when cleaning up the duplicated type-info and
HType code? TRBinaryOpIC::TypeInfo has to stay dense for now because it's packed into the stub key. http://codereview.chromium.org/6852015/diff/1/src/ic.cc#newcode2030 src/ic.cc:2030: if (x >= y) return x; On 2011/04/14 10:26:47, fschneider wrote:
Maybe have x > y here since you handle == cases already above.
Done. http://codereview.chromium.org/6852015/ -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
