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, |