From 7f273146442ddf44bbde97d25442ae02221f8777 Mon Sep 17 00:00:00 2001 From: "kasperl@chromium.org" Date: Mon, 15 Jun 2009 13:17:09 +0000 Subject: [PATCH] Fix stack alignment issue with the new fast Math.random() code under Mac OS. Review URL: http://codereview.chromium.org/125123 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2168 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ia32/codegen-ia32.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc index 8faec95ad..3357f57e4 100644 --- a/src/ia32/codegen-ia32.cc +++ b/src/ia32/codegen-ia32.cc @@ -4943,7 +4943,23 @@ void CodeGenerator::GenerateGetFramePointer(ZoneList* args) { void CodeGenerator::GenerateRandomPositiveSmi(ZoneList* args) { ASSERT(args->length() == 0); frame_->SpillAll(); + + // Make sure the frame is aligned like the OS expects. + static const int kFrameAlignment = OS::ActivationFrameAlignment(); + if (kFrameAlignment > 0) { + ASSERT(IsPowerOf2(kFrameAlignment)); + __ mov(edi, Operand(esp)); // Save in callee-saved register. + __ and_(esp, -kFrameAlignment); + } + + // Call V8::RandomPositiveSmi(). __ call(FUNCTION_ADDR(V8::RandomPositiveSmi), RelocInfo::RUNTIME_ENTRY); + + // Restore stack pointer from callee-saved register edi. + if (kFrameAlignment > 0) { + __ mov(esp, Operand(edi)); + } + Result result = allocator_->Allocate(eax); frame_->Push(&result); } -- 2.34.1