| Index: src/ia32/stub-cache-ia32.cc
|
| ===================================================================
|
| --- src/ia32/stub-cache-ia32.cc (revision 2768)
|
| +++ src/ia32/stub-cache-ia32.cc (working copy)
|
| @@ -1786,8 +1786,18 @@
|
| // Make sure that the maximum heap object size will never cause us
|
| // problems here.
|
| ASSERT(Heap::MaxObjectSizeInPagedSpace() >= JSObject::kMaxInstanceSize);
|
| - __ AllocateObjectInNewSpace(ecx, edx, ecx, no_reg, &generic_stub_call, false);
|
| + ExternalReference new_space_allocation_top =
|
| + ExternalReference::new_space_allocation_top_address();
|
| + __ mov(edx, Operand::StaticVariable(new_space_allocation_top));
|
| + __ add(ecx, Operand(edx)); // Calculate new top.
|
| + ExternalReference new_space_allocation_limit =
|
| + ExternalReference::new_space_allocation_limit_address();
|
| + __ cmp(ecx, Operand::StaticVariable(new_space_allocation_limit));
|
| + __ j(above_equal, &generic_stub_call);
|
|
|
| + // Update new space top.
|
| + __ mov(Operand::StaticVariable(new_space_allocation_top), ecx);
|
| +
|
| // Allocated the JSObject, now initialize the fields and add the heap tag.
|
| // ebx: initial map
|
| // edx: JSObject
|
| @@ -1850,9 +1860,9 @@
|
| __ mov(ebx, eax);
|
| __ pop(eax);
|
|
|
| - // Remove caller arguments and receiver from the stack and return.
|
| + // Remove caller arguments from the stack and return.
|
| __ pop(ecx);
|
| - __ lea(esp, Operand(esp, ebx, times_pointer_size, 1 * kPointerSize));
|
| + __ lea(esp, Operand(esp, ebx, times_4, 1 * kPointerSize)); // 1 ~ receiver
|
| __ push(ecx);
|
| __ IncrementCounter(&Counters::constructed_objects, 1);
|
| __ IncrementCounter(&Counters::constructed_objects_stub, 1);
|
|
|