Reviewers: Vyacheslav Egorov,
Message:
Vyacheslav, this relates to an old commit of yours, r8781, and the mips
port of
that in r8801. Thanks.
Description:
MIPS: Fix KeyedStoreStubCompiler::GenerateStoreFastDoubleElement()
Test regress-91013.js (to ensure that the stored value was returned) passed
on
mips
without this fix, since the input value (in value_reg, a0) also happens to
be in
mips return value register v0 at the time of call.
But it is fragile to depend on that behavior, so an explicit move from a0
to v0
is warranted. This fix puts that move in the delay slot of the Ret().
BUG=
TEST=
Please review this at http://codereview.chromium.org/7779006/
Affected files:
M src/mips/stub-cache-mips.cc
Index: src/mips/stub-cache-mips.cc
diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
index
5feac30ba75cf6db482a09b3205cadd8d2bfd71b..c17a658d1dae16ecc6e0b2e42b8fbf608aa7e012
100644
--- a/src/mips/stub-cache-mips.cc
+++ b/src/mips/stub-cache-mips.cc
@@ -4428,7 +4428,8 @@ void
KeyedStoreStubCompiler::GenerateStoreFastDoubleElement(
__ sw(mantissa_reg, FieldMemOperand(scratch,
FixedDoubleArray::kHeaderSize));
uint32_t offset = FixedDoubleArray::kHeaderSize +
sizeof(kHoleNanLower32);
__ sw(exponent_reg, FieldMemOperand(scratch, offset));
- __ Ret();
+ __ Ret(USE_DELAY_SLOT);
+ __ mov(v0, value_reg); // In delay slot.
__ bind(&maybe_nan);
// Could be NaN or Infinity. If fraction is not zero, it's NaN, otherwise
@@ -4478,7 +4479,8 @@ void
KeyedStoreStubCompiler::GenerateStoreFastDoubleElement(
__ sw(mantissa_reg, MemOperand(scratch, 0));
__ sw(exponent_reg, MemOperand(scratch, Register::kSizeInBytes));
}
- __ Ret();
+ __ Ret(USE_DELAY_SLOT);
+ __ mov(v0, value_reg); // In delay slot.
// Handle store cache miss, replacing the ic with the generic stub.
__ bind(&miss_force_generic);
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev