X87: Fix memento initialization when constructing from new call

port 3285e3bf07 (r29719).

original commit message:

  Additionally, push the allocation site or undefined independently of creatin

BUG=

Review URL: https://codereview.chromium.org/1229023003

Cr-Commit-Position: refs/heads/master@{#29723}
This commit is contained in:
chunyang.dai 2015-07-17 03:07:03 -07:00 committed by Commit bot
parent c062b28aeb
commit 3536562e18

View File

@ -117,12 +117,9 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
{
FrameScope scope(masm, StackFrame::CONSTRUCT);
if (create_memento) {
__ AssertUndefinedOrAllocationSite(ebx);
__ push(ebx);
}
// Preserve the incoming parameters on the stack.
__ AssertUndefinedOrAllocationSite(ebx);
__ push(ebx);
__ SmiTag(eax);
__ push(eax);
__ push(edi);
@ -254,7 +251,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ mov(Operand(esi, AllocationMemento::kMapOffset),
factory->allocation_memento_map());
// Get the cell or undefined.
__ mov(edx, Operand(esp, kPointerSize*2));
__ mov(edx, Operand(esp, 3 * kPointerSize));
__ AssertUndefinedOrAllocationSite(edx);
__ mov(Operand(esi, AllocationMemento::kAllocationSiteOffset),
edx);
} else {
@ -422,12 +420,13 @@ void Builtins::Generate_JSConstructStubForDerived(MacroAssembler* masm) {
// -- edx: original constructor
// -----------------------------------
// TODO(dslomov): support pretenuring
CHECK(!FLAG_pretenuring_call_new);
{
FrameScope frame_scope(masm, StackFrame::CONSTRUCT);
// Preserve allocation site.
__ AssertUndefinedOrAllocationSite(ebx);
__ push(ebx);
// Preserve actual arguments count.
__ SmiTag(eax);
__ push(eax);