Index: src/mips/builtins-mips.cc |
diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc |
index 7733c90d057bd024d4656f18e5b14a9ae2fb824f..5d08f128ba82b6c0228d864c750adf184dfe44ef 100644 |
--- a/src/mips/builtins-mips.cc |
+++ b/src/mips/builtins-mips.cc |
@@ -624,13 +624,13 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) { |
// -- sp[...]: constructor arguments |
// ----------------------------------- |
- Label non_function_call; |
+ Label slow, non_function_call; |
// Check that the function is not a smi. |
__ And(t0, a1, Operand(kSmiTagMask)); |
__ Branch(&non_function_call, eq, t0, Operand(zero_reg)); |
// Check that the function is a JSFunction. |
__ GetObjectType(a1, a2, a2); |
- __ Branch(&non_function_call, ne, a2, Operand(JS_FUNCTION_TYPE)); |
+ __ Branch(&slow, ne, a2, Operand(JS_FUNCTION_TYPE)); |
// Jump to the function-specific construct stub. |
__ lw(a2, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); |
@@ -640,13 +640,21 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) { |
// a0: number of arguments |
// a1: called object |
+ // a2: object type |
+ Label do_call; |
+ __ bind(&slow); |
+ __ Branch(&non_function_call, ne, a2, Operand(JS_FUNCTION_PROXY_TYPE)); |
+ __ GetBuiltinEntry(a3, Builtins::CALL_FUNCTION_PROXY_AS_CONSTRUCTOR); |
+ __ jmp(&do_call); |
+ |
__ bind(&non_function_call); |
+ __ GetBuiltinEntry(a3, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR); |
+ __ bind(&do_call); |
// CALL_NON_FUNCTION expects the non-function constructor as receiver |
// (instead of the original receiver from the call site). The receiver is |
// stack element argc. |
// Set expected number of arguments to zero (not changing a0). |
__ mov(a2, zero_reg); |
- __ GetBuiltinEntry(a3, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR); |
__ SetCallKind(t1, CALL_AS_METHOD); |
__ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), |
RelocInfo::CODE_TARGET); |