Index: src/ia32/stub-cache-ia32.cc |
diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc |
index 189c0e4d16c668e70e8094ba745c62e3be78a2a8..b5fcca6fe3512080a8247242117f5155670af984 100644 |
--- a/src/ia32/stub-cache-ia32.cc |
+++ b/src/ia32/stub-cache-ia32.cc |
@@ -1171,7 +1171,7 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object, |
__ j(not_equal, &miss); |
if (argc == 1) { // Otherwise fall through to call builtin. |
- Label call_builtin, exit, with_rset_update, attempt_to_grow_elements; |
+ Label call_builtin, exit, with_write_barrier, attempt_to_grow_elements; |
// Get the array's length into eax and calculate new length. |
__ mov(eax, FieldOperand(edx, JSArray::kLengthOffset)); |
@@ -1181,7 +1181,6 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object, |
// Get the element's length into ecx. |
__ mov(ecx, FieldOperand(ebx, FixedArray::kLengthOffset)); |
- __ SmiTag(ecx); |
// Check if we could survive without allocation. |
__ cmp(eax, Operand(ecx)); |
@@ -1199,17 +1198,16 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object, |
// Check if value is a smi. |
__ test(ecx, Immediate(kSmiTagMask)); |
- __ j(not_zero, &with_rset_update); |
+ __ j(not_zero, &with_write_barrier); |
__ bind(&exit); |
__ ret((argc + 1) * kPointerSize); |
- __ bind(&with_rset_update); |
+ __ bind(&with_write_barrier); |
__ InNewSpace(ebx, ecx, equal, &exit); |
- RecordWriteStub stub(ebx, edx, ecx); |
- __ CallStub(&stub); |
+ __ RecordWriteHelper(ebx, edx, ecx); |
__ ret((argc + 1) * kPointerSize); |
__ bind(&attempt_to_grow_elements); |
@@ -1249,10 +1247,10 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object, |
// Increment element's and array's sizes. |
__ add(FieldOperand(ebx, FixedArray::kLengthOffset), |
- Immediate(kAllocationDelta)); |
+ Immediate(Smi::FromInt(kAllocationDelta))); |
__ mov(FieldOperand(edx, JSArray::kLengthOffset), eax); |
- // Elements are in new space, so no remembered set updates are necessary. |
+ // Elements are in new space, so write barrier is not required. |
__ ret((argc + 1) * kPointerSize); |
__ bind(&call_builtin); |