Chromium Code Reviews| 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()); |
| } |