| Index: src/ia32/builtins-ia32.cc
|
| diff --git a/src/ia32/builtins-ia32.cc b/src/ia32/builtins-ia32.cc
|
| index 4666311af68f75f163f320ba7955be5001070a05..62bca6d23b7b4bde2e458345a08fe7733ef4062d 100644
|
| --- a/src/ia32/builtins-ia32.cc
|
| +++ b/src/ia32/builtins-ia32.cc
|
| @@ -74,50 +74,14 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -void Builtins::Generate_JSConstructCall(MacroAssembler* masm) {
|
| +static void Generate_JSConstructStubHelper(MacroAssembler* masm,
|
| + bool is_api_function,
|
| + bool count_constructions) {
|
| // ----------- S t a t e -------------
|
| // -- eax: number of arguments
|
| // -- edi: constructor function
|
| // -----------------------------------
|
|
|
| - Label slow, non_function_call;
|
| - // Check that function is not a smi.
|
| - __ JumpIfSmi(edi, &non_function_call);
|
| - // Check that function is a JSFunction.
|
| - __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx);
|
| - __ j(not_equal, &slow);
|
| -
|
| - // Jump to the function-specific construct stub.
|
| - __ mov(ebx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
|
| - __ mov(ebx, FieldOperand(ebx, SharedFunctionInfo::kConstructStubOffset));
|
| - __ lea(ebx, FieldOperand(ebx, Code::kHeaderSize));
|
| - __ jmp(ebx);
|
| -
|
| - // edi: called object
|
| - // eax: number of arguments
|
| - // ecx: object map
|
| - Label do_call;
|
| - __ bind(&slow);
|
| - __ CmpInstanceType(ecx, JS_FUNCTION_PROXY_TYPE);
|
| - __ j(not_equal, &non_function_call);
|
| - __ GetBuiltinEntry(edx, Builtins::CALL_FUNCTION_PROXY_AS_CONSTRUCTOR);
|
| - __ jmp(&do_call);
|
| -
|
| - __ bind(&non_function_call);
|
| - __ GetBuiltinEntry(edx, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR);
|
| - __ bind(&do_call);
|
| - // Set expected number of arguments to zero (not changing eax).
|
| - __ Set(ebx, Immediate(0));
|
| - Handle<Code> arguments_adaptor =
|
| - masm->isolate()->builtins()->ArgumentsAdaptorTrampoline();
|
| - __ SetCallKind(ecx, CALL_AS_METHOD);
|
| - __ jmp(arguments_adaptor, RelocInfo::CODE_TARGET);
|
| -}
|
| -
|
| -
|
| -static void Generate_JSConstructStubHelper(MacroAssembler* masm,
|
| - bool is_api_function,
|
| - bool count_constructions) {
|
| // Should never count constructions for api objects.
|
| ASSERT(!is_api_function || !count_constructions);
|
|
|
| @@ -454,8 +418,8 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
|
|
| // Invoke the code.
|
| if (is_construct) {
|
| - __ call(masm->isolate()->builtins()->JSConstructCall(),
|
| - RelocInfo::CODE_TARGET);
|
| + CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
|
| + __ CallStub(&stub);
|
| } else {
|
| ParameterCount actual(eax);
|
| __ InvokeFunction(edi, actual, CALL_FUNCTION,
|
|
|