Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 33b26e6bc8e12c67bd2113f7942c69ce971d37cb..e642602738555b1898cef074521e7c6887604fe6 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -4105,11 +4105,14 @@ void LCodeGen::DoCallNew(LCallNew* instr) { |
ASSERT(ToRegister(instr->constructor()).is(edi)); |
ASSERT(ToRegister(instr->result()).is(eax)); |
- __ Set(eax, Immediate(instr->arity())); |
- // No cell in ebx for construct type feedback in optimized code |
- Handle<Object> undefined_value(isolate()->heap()->undefined_value()); |
- __ mov(ebx, Immediate(undefined_value)); |
+ if (FLAG_optimize_constructed_arrays) { |
+ // No cell in ebx for construct type feedback in optimized code |
+ Handle<Object> undefined_value(isolate()->heap()->undefined_value(), |
+ isolate()); |
+ __ mov(ebx, Immediate(undefined_value)); |
+ } |
CallConstructStub stub(NO_CALL_FUNCTION_FLAGS); |
+ __ Set(eax, Immediate(instr->arity())); |
CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr); |
} |
@@ -4118,12 +4121,12 @@ void LCodeGen::DoCallNewArray(LCallNewArray* instr) { |
ASSERT(ToRegister(instr->context()).is(esi)); |
ASSERT(ToRegister(instr->constructor()).is(edi)); |
ASSERT(ToRegister(instr->result()).is(eax)); |
+ ASSERT(FLAG_optimize_constructed_arrays); |
- __ Set(eax, Immediate(instr->arity())); |
__ mov(ebx, instr->hydrogen()->property_cell()); |
Handle<Code> array_construct_code = |
isolate()->builtins()->ArrayConstructCode(); |
- |
+ __ Set(eax, Immediate(instr->arity())); |
CallCode(array_construct_code, RelocInfo::CONSTRUCT_CALL, instr); |
} |