Revision: 8408
Author: [email protected]
Date: Fri Jun 24 04:54:25 2011
Log: Merge r8357 to 3.3 branch
r8357: ARM: Fix context save/restore for VFP registers.
[email protected]
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7240023
http://code.google.com/p/v8/source/detail?r=8408
Modified:
/branches/3.3/src/arm/assembler-arm.h
/branches/3.3/src/arm/code-stubs-arm.cc
/branches/3.3/src/arm/frames-arm.h
/branches/3.3/src/version.cc
=======================================
--- /branches/3.3/src/arm/assembler-arm.h Wed May 25 00:58:50 2011
+++ /branches/3.3/src/arm/assembler-arm.h Fri Jun 24 04:54:25 2011
@@ -303,6 +303,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.3/src/arm/code-stubs-arm.cc Mon May 30 07:32:41 2011
+++ /branches/3.3/src/arm/code-stubs-arm.cc Fri Jun 24 04:54:25 2011
@@ -3552,12 +3552,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
@@ -3682,6 +3694,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.3/src/arm/frames-arm.h Mon Apr 4 01:25:31 2011
+++ /branches/3.3/src/arm/frames-arm.h Fri Jun 24 04:54:25 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.3/src/version.cc Wed Jun 22 08:46:50 2011
+++ /branches/3.3/src/version.cc Fri Jun 24 04:54:25 2011
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 3
#define BUILD_NUMBER 10
-#define PATCH_LEVEL 14
+#define PATCH_LEVEL 15
// 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