Reviewers: William Hesse, Message: Small review.
Description: X64/Win64: Fix bug in returning ObjectPair. Used the registers to test for failure before loading the result from the stack. Please review this at http://codereview.chromium.org/335006 Affected files: M src/x64/codegen-x64.cc M src/x64/macro-assembler-x64.cc Index: src/x64/codegen-x64.cc diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc index d36af8c794baff92b507bbcb3cfbb4e9c33a5eaf..a4fd5928e92eee1811069b67014764389f18be2c 100644 --- a/src/x64/codegen-x64.cc +++ b/src/x64/codegen-x64.cc @@ -6862,6 +6862,15 @@ void CEntryStub::GenerateCore(MacroAssembler* masm, // Check for failure result. Label failure_returned; ASSERT(((kFailureTag + 1) & kFailureTagMask) == 0); +#ifdef _WIN64 + // If return value is on the stack, pop it to registers. + if (result_size_ > 1) { + ASSERT_EQ(2, result_size_); + // Position above 4 argument mirrors and arguments object. + __ movq(rax, Operand(rsp, 6 * kPointerSize)); + __ movq(rdx, Operand(rsp, 7 * kPointerSize)); + } +#endif __ lea(rcx, Operand(rax, 1)); // Lower 2 bits of rcx are 0 iff rax has failure tag. __ testl(rcx, Immediate(kFailureTagMask)); Index: src/x64/macro-assembler-x64.cc diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 61a8319fd26cb09949de74ee7373bcc9bb228dd1..b2f69bb7a99de3047e2d9a0760793957f029fd10 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -1880,16 +1880,6 @@ void MacroAssembler::LeaveExitFrame(StackFrame::Type type, int result_size) { movq(rcx, Operand(rbp, 1 * kPointerSize)); movq(rbp, Operand(rbp, 0 * kPointerSize)); -#ifdef _WIN64 - // If return value is on the stack, pop it to registers. - if (result_size > 1) { - ASSERT_EQ(2, result_size); - // Position above 4 argument mirrors and arguments object. - movq(rax, Operand(rsp, 6 * kPointerSize)); - movq(rdx, Operand(rsp, 7 * kPointerSize)); - } -#endif - // Pop everything up to and including the arguments and the receiver // from the caller stack. lea(rsp, Operand(r15, 1 * kPointerSize)); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---