Reviewers: Michael Starzinger,
Message:
One more CL to fix Win64 tests
Description:
Fix x64 frame size to accomodate saved XMM registers
[email protected]
Please review this at https://codereview.chromium.org/13881016/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/x64/code-stubs-x64.cc
M src/x64/frames-x64.h
Index: src/x64/code-stubs-x64.cc
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
index
ad77de6490b25173df37d4198066fa63fd6b462d..afc567cd9ad56d605c72e7f784e2e6feec3f6d60
100644
--- a/src/x64/code-stubs-x64.cc
+++ b/src/x64/code-stubs-x64.cc
@@ -4272,10 +4272,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm,
bool is_construct) {
Label invoke, handler_entry, exit;
Label not_outermost_js, not_outermost_js_2;
-#ifdef _WIN64
- const int kCalleeSaveXMMRegisters = 10;
- const int kFullXMMRegisterSize = 16;
-#endif
{ // NOLINT. Scope block confuses linter.
MacroAssembler::NoRootArrayScope uninitialized_root_register(masm);
// Set up frame.
@@ -4305,17 +4301,17 @@ void JSEntryStub::GenerateBody(MacroAssembler*
masm, bool is_construct) {
#ifdef _WIN64
// On Win64 XMM6-XMM15 are callee-save
- __ subq(rsp, Immediate(kCalleeSaveXMMRegisters *
kFullXMMRegisterSize));
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 0), xmm6);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 1), xmm7);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 2), xmm8);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 3), xmm9);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 4), xmm10);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 5), xmm11);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 6), xmm12);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 7), xmm13);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 8), xmm14);
- __ movdqu(Operand(rsp, kFullXMMRegisterSize * 9), xmm15);
+ __ subq(rsp, Immediate(EntryFrameConstants::kXMMRegistersBlockSize));
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 0),
xmm6);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 1),
xmm7);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 2),
xmm8);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 3),
xmm9);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 4),
xmm10);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 5),
xmm11);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 6),
xmm12);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 7),
xmm13);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 8),
xmm14);
+ __ movdqu(Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 9),
xmm15);
#endif
// Set up the roots and smi constant registers.
@@ -4408,17 +4404,17 @@ void JSEntryStub::GenerateBody(MacroAssembler*
masm, bool is_construct) {
// Restore callee-saved registers (X64 conventions).
#ifdef _WIN64
// On Win64 XMM6-XMM15 are callee-save
- __ movdqu(xmm6, Operand(rsp, kFullXMMRegisterSize * 0));
- __ movdqu(xmm7, Operand(rsp, kFullXMMRegisterSize * 1));
- __ movdqu(xmm8, Operand(rsp, kFullXMMRegisterSize * 2));
- __ movdqu(xmm8, Operand(rsp, kFullXMMRegisterSize * 3));
- __ movdqu(xmm10, Operand(rsp, kFullXMMRegisterSize * 4));
- __ movdqu(xmm11, Operand(rsp, kFullXMMRegisterSize * 5));
- __ movdqu(xmm12, Operand(rsp, kFullXMMRegisterSize * 6));
- __ movdqu(xmm13, Operand(rsp, kFullXMMRegisterSize * 7));
- __ movdqu(xmm14, Operand(rsp, kFullXMMRegisterSize * 8));
- __ movdqu(xmm15, Operand(rsp, kFullXMMRegisterSize * 9));
- __ addq(rsp, Immediate(kCalleeSaveXMMRegisters * kFullXMMRegisterSize));
+ __ movdqu(xmm6, Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 0));
+ __ movdqu(xmm7, Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 1));
+ __ movdqu(xmm8, Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 2));
+ __ movdqu(xmm8, Operand(rsp, EntryFrameConstants::kXMMRegisterSize * 3));
+ __ movdqu(xmm10, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
4));
+ __ movdqu(xmm11, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
5));
+ __ movdqu(xmm12, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
6));
+ __ movdqu(xmm13, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
7));
+ __ movdqu(xmm14, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
8));
+ __ movdqu(xmm15, Operand(rsp, EntryFrameConstants::kXMMRegisterSize *
9));
+ __ addq(rsp, Immediate(EntryFrameConstants::kXMMRegistersBlockSize));
#endif
__ pop(rbx);
Index: src/x64/frames-x64.h
diff --git a/src/x64/frames-x64.h b/src/x64/frames-x64.h
index
14cc5b8f21aba7b51cdc907969f66f079be65491..6f7f44b64021dfc4d9c01c2ee777cd616e4a0acc
100644
--- a/src/x64/frames-x64.h
+++ b/src/x64/frames-x64.h
@@ -51,7 +51,12 @@ const int kNumSafepointRegisters = 16;
class EntryFrameConstants : public AllStatic {
public:
#ifdef _WIN64
- static const int kCallerFPOffset = -10 * kPointerSize;
+ static const int kCalleeSaveXMMRegisters = 10;
+ static const int kXMMRegisterSize = 16;
+ static const int kXMMRegistersBlockSize =
+ kXMMRegisterSize * kCalleeSaveXMMRegisters;
+ static const int kCallerFPOffset =
+ -10 * kPointerSize - kXMMRegistersBlockSize;
#else
static const int kCallerFPOffset = -8 * kPointerSize;
#endif
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.