Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index bfa49d51d0ac4e3dfdd458f26e1bcc9d2f5fd86a..2897234977d0ace3dd3259635392277e7c9d02fb 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -130,9 +130,10 @@ static void InitializeArrayConstructorDescriptor( |
int constant_stack_parameter_count) { |
// register state |
// eax -- number of arguments |
+ // edi -- function |
// ebx -- type info cell with elements kind |
- static Register registers[] = { ebx }; |
- descriptor->register_param_count_ = 1; |
+ static Register registers[] = { edi, ebx }; |
+ descriptor->register_param_count_ = 2; |
if (constant_stack_parameter_count != 0) { |
// stack param count needs (constructor pointer, and single argument) |
@@ -7921,15 +7922,8 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) { |
// Get the elements kind and case on that. |
__ cmp(ebx, Immediate(undefined_sentinel)); |
__ j(equal, &no_info); |
- __ mov(edx, FieldOperand(ebx, kPointerSize)); |
- |
- // There is no info if the call site went megamorphic either |
- |
- // TODO(mvstanton): Really? I thought if it was the array function that |
- // the cell wouldn't get stamped as megamorphic. |
- __ cmp(edx, Immediate(TypeFeedbackCells::MegamorphicSentinel( |
- masm->isolate()))); |
- __ j(equal, &no_info); |
+ __ mov(edx, FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset)); |
+ __ JumpIfNotSmi(edx, &no_info); |
__ SmiUntag(edx); |
__ jmp(&switch_ready); |
__ bind(&no_info); |