Revision: 8407
Author: [email protected]
Date: Fri Jun 24 04:53:35 2011
Log: Merge r8357 to 3.2 branch
r8357: ARM: Fix context save/restore for VFP registers.
[email protected]
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7241020
http://code.google.com/p/v8/source/detail?r=8407
Modified:
/branches/3.2/src/arm/assembler-arm.h
/branches/3.2/src/arm/code-stubs-arm.cc
/branches/3.2/src/arm/frames-arm.h
/branches/3.2/src/version.cc
=======================================
--- /branches/3.2/src/arm/assembler-arm.h Mon Apr 11 05:33:05 2011
+++ /branches/3.2/src/arm/assembler-arm.h Fri Jun 24 04:53:35 2011
@@ -302,6 +302,10 @@
const DwVfpRegister d14 = { 14 };
const DwVfpRegister d15 = { 15 };
+// Aliases for double registers.
+const DwVfpRegister kFirstCalleeSavedDoubleReg = d8;
+const DwVfpRegister kLastCalleeSavedDoubleReg = d15;
+
// Coprocessor register
struct CRegister {
=======================================
--- /branches/3.2/src/arm/code-stubs-arm.cc Wed May 18 05:48:35 2011
+++ /branches/3.2/src/arm/code-stubs-arm.cc Fri Jun 24 04:53:35 2011
@@ -3413,12 +3413,24 @@
// 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);
+ }
+
// Get address of argv, see stm above.
// r0: code entry
// r1: function
// r2: receiver
// r3: argc
- __ ldr(r4, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize)); //
argv
+
+ // Setup argv in r4.
+ int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize;
+ if (CpuFeatures::IsSupported(VFP3)) {
+ offset_to_argv += kNumDoubleCalleeSaved * kDoubleSize;
+ }
+ __ ldr(r4, MemOperand(sp, offset_to_argv));
// Push a frame with special values setup to mark it as an entry frame.
// r0: code entry
@@ -3543,6 +3555,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());
}
=======================================
--- /branches/3.2/src/arm/frames-arm.h Mon Apr 4 01:25:31 2011
+++ /branches/3.2/src/arm/frames-arm.h Fri Jun 24 04:53:35 2011
@@ -72,6 +72,9 @@
static const int kNumCalleeSaved = 7 + kR9Available;
+// Double registers d8 to d15 are callee-saved.
+static const int kNumDoubleCalleeSaved = 8;
+
// Number of registers for which space is reserved in safepoints. Must be a
// multiple of 8.
=======================================
--- /branches/3.2/src/version.cc Fri Jun 24 01:20:24 2011
+++ /branches/3.2/src/version.cc Fri Jun 24 04:53:35 2011
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 2
#define BUILD_NUMBER 10
-#define PATCH_LEVEL 22
+#define PATCH_LEVEL 23
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev