Revision: 9035
Author:   [email protected]
Date:     Mon Aug 29 02:10:27 2011
Log:      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().

Patch by Paul Lind.

BUG=
TEST=

Review URL: http://codereview.chromium.org/7779006
http://code.google.com/p/v8/source/detail?r=9035

Modified:
 /branches/bleeding_edge/src/mips/stub-cache-mips.cc

=======================================
--- /branches/bleeding_edge/src/mips/stub-cache-mips.cc Thu Aug 25 05:12:25 2011 +++ /branches/bleeding_edge/src/mips/stub-cache-mips.cc Mon Aug 29 02:10:27 2011
@@ -4428,7 +4428,8 @@
__ 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 @@
     __ 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

Reply via email to