| Index: src/ia32/code-stubs-ia32.cc | 
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc | 
| index 941bb32affdfcc7dd5b0fc87829bf46d8429eb81..7f0f9ccd10886018f7449484f1e7478a728c8f9e 100644 | 
| --- a/src/ia32/code-stubs-ia32.cc | 
| +++ b/src/ia32/code-stubs-ia32.cc | 
| @@ -168,15 +168,21 @@ static void InitializeArrayConstructorDescriptor( | 
| // eax -- number of arguments | 
| // edi -- function | 
| // ebx -- type info cell with elements kind | 
| -  static Register registers[] = { edi, ebx }; | 
| -  descriptor->register_param_count_ = 2; | 
| +  static Register registers_variable_args[] = { edi, ebx, eax }; | 
| +  static Register registers_no_args[] = { edi, ebx }; | 
|  | 
| -  if (constant_stack_parameter_count != 0) { | 
| +  if (constant_stack_parameter_count == 0) { | 
| +    descriptor->register_param_count_ = 2; | 
| +    descriptor->register_params_ = registers_no_args; | 
| +  } else { | 
| // stack param count needs (constructor pointer, and single argument) | 
| +    descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; | 
| descriptor->stack_parameter_count_ = eax; | 
| +    descriptor->register_param_count_ = 3; | 
| +    descriptor->register_params_ = registers_variable_args; | 
| } | 
| + | 
| descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; | 
| -  descriptor->register_params_ = registers; | 
| descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; | 
| descriptor->deoptimization_handler_ = | 
| Runtime::FunctionForId(Runtime::kArrayConstructor)->entry; | 
| @@ -190,15 +196,21 @@ static void InitializeInternalArrayConstructorDescriptor( | 
| // register state | 
| // eax -- number of arguments | 
| // edi -- constructor function | 
| -  static Register registers[] = { edi }; | 
| -  descriptor->register_param_count_ = 1; | 
| +  static Register registers_variable_args[] = { edi, eax }; | 
| +  static Register registers_no_args[] = { edi }; | 
|  | 
| -  if (constant_stack_parameter_count != 0) { | 
| +  if (constant_stack_parameter_count == 0) { | 
| +    descriptor->register_param_count_ = 1; | 
| +    descriptor->register_params_ = registers_no_args; | 
| +  } else { | 
| // stack param count needs (constructor pointer, and single argument) | 
| +    descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; | 
| descriptor->stack_parameter_count_ = eax; | 
| +    descriptor->register_param_count_ = 2; | 
| +    descriptor->register_params_ = registers_variable_args; | 
| } | 
| + | 
| descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; | 
| -  descriptor->register_params_ = registers; | 
| descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; | 
| descriptor->deoptimization_handler_ = | 
| Runtime::FunctionForId(Runtime::kInternalArrayConstructor)->entry; | 
| @@ -5926,7 +5938,7 @@ void InternalArrayConstructorStub::GenerateCase( | 
| __ TailCallStub(&stub0); | 
|  | 
| __ bind(¬_zero_case); | 
| -  __ cmp(eax, 1); | 
| +  __ cmp(eax, Immediate(1)); | 
| __ j(greater, ¬_one_case); | 
|  | 
| if (IsFastPackedElementsKind(kind)) { | 
| @@ -5959,7 +5971,6 @@ void InternalArrayConstructorStub::Generate(MacroAssembler* masm) { | 
| //  -- esp[0] : return address | 
| //  -- esp[4] : last argument | 
| // ----------------------------------- | 
| - | 
| if (FLAG_debug_code) { | 
| // The array construct code is only set for the global and natives | 
| // builtin Array functions which always have maps. | 
|  |