Index: src/arm/code-stubs-arm.cc |
=================================================================== |
--- src/arm/code-stubs-arm.cc (revision 8283) |
+++ src/arm/code-stubs-arm.cc (working copy) |
@@ -3561,12 +3561,23 @@ |
// Save callee-saved registers (incl. cp and fp), sp, and lr |
__ stm(db_w, sp, kCalleeSaved | lr.bit()); |
+ if (CpuFeatures::IsSupported(VFP3)) { |
+ CpuFeatures::Scope scope(VFP3); |
+ // Save callee-saved vfp registers. |
+ __ vstm(db_w, sp, kFirstCalleeSavedDoubleReg, kLastCalleeSavedDoubleReg); |
Søren Thygesen Gjesse
2011/06/16 09:38:07
Oops - isn't this a bug that might have broken the
Alexandre
2011/06/16 12:58:48
Indeed! I'll break it into a separate patch.
If yo
|
+ // Set up reserved registers. |
+ __ vmov(d12, 255.0); |
+ __ vmov(d13, -0.0); |
+ __ vmov(d14, 0.0); |
+ } |
+ |
// Get address of argv, see stm above. |
// r0: code entry |
// r1: function |
// r2: receiver |
// r3: argc |
- __ ldr(r4, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize)); // argv |
+ __ ldr(r4, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize + |
+ kNumDoubleCalleeSaved * kDoubleSize)); // argv |
// Push a frame with special values setup to mark it as an entry frame. |
// r0: code entry |
@@ -3691,6 +3702,13 @@ |
__ mov(lr, Operand(pc)); |
} |
#endif |
+ |
+ if (CpuFeatures::IsSupported(VFP3)) { |
+ CpuFeatures::Scope scope(VFP3); |
+ // Restore callee-saved vfp registers. |
+ __ vldm(ia_w, sp, kFirstCalleeSavedDoubleReg, kLastCalleeSavedDoubleReg); |
+ } |
+ |
__ ldm(ia_w, sp, kCalleeSaved | pc.bit()); |
} |