OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1985 | 1985 |
1986 StubRuntimeCallHelper call_helper; | 1986 StubRuntimeCallHelper call_helper; |
1987 generator.GenerateSlow(masm(), call_helper); | 1987 generator.GenerateSlow(masm(), call_helper); |
1988 | 1988 |
1989 // Tail call the full function. We do not have to patch the receiver | 1989 // Tail call the full function. We do not have to patch the receiver |
1990 // because the function makes no use of it. | 1990 // because the function makes no use of it. |
1991 __ bind(&slow); | 1991 __ bind(&slow); |
1992 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) | 1992 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) |
1993 ? CALL_AS_FUNCTION | 1993 ? CALL_AS_FUNCTION |
1994 : CALL_AS_METHOD; | 1994 : CALL_AS_METHOD; |
1995 __ InvokeFunction(function, ParameterCount(function), arguments(), | 1995 ParameterCount expected(function); |
| 1996 __ InvokeFunction(function, expected, arguments(), |
1996 JUMP_FUNCTION, NullCallWrapper(), call_kind); | 1997 JUMP_FUNCTION, NullCallWrapper(), call_kind); |
1997 | 1998 |
1998 __ bind(&miss); | 1999 __ bind(&miss); |
1999 // rcx: function name. | 2000 // rcx: function name. |
2000 GenerateMissBranch(); | 2001 GenerateMissBranch(); |
2001 | 2002 |
2002 // Return the generated code. | 2003 // Return the generated code. |
2003 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2004 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); |
2004 } | 2005 } |
2005 | 2006 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2100 __ AllocateHeapNumber(rax, rdx, &slow); | 2101 __ AllocateHeapNumber(rax, rdx, &slow); |
2101 __ movq(FieldOperand(rax, HeapNumber::kValueOffset), rbx); | 2102 __ movq(FieldOperand(rax, HeapNumber::kValueOffset), rbx); |
2102 __ ret(2 * kPointerSize); | 2103 __ ret(2 * kPointerSize); |
2103 | 2104 |
2104 // Tail call the full function. We do not have to patch the receiver | 2105 // Tail call the full function. We do not have to patch the receiver |
2105 // because the function makes no use of it. | 2106 // because the function makes no use of it. |
2106 __ bind(&slow); | 2107 __ bind(&slow); |
2107 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) | 2108 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) |
2108 ? CALL_AS_FUNCTION | 2109 ? CALL_AS_FUNCTION |
2109 : CALL_AS_METHOD; | 2110 : CALL_AS_METHOD; |
2110 __ InvokeFunction(function, ParameterCount(function), arguments(), | 2111 ParameterCount expected(function); |
| 2112 __ InvokeFunction(function, expected, arguments(), |
2111 JUMP_FUNCTION, NullCallWrapper(), call_kind); | 2113 JUMP_FUNCTION, NullCallWrapper(), call_kind); |
2112 | 2114 |
2113 __ bind(&miss); | 2115 __ bind(&miss); |
2114 // rcx: function name. | 2116 // rcx: function name. |
2115 GenerateMissBranch(); | 2117 GenerateMissBranch(); |
2116 | 2118 |
2117 // Return the generated code. | 2119 // Return the generated code. |
2118 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2120 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); |
2119 } | 2121 } |
2120 | 2122 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2284 // Handle call cache miss. | 2286 // Handle call cache miss. |
2285 __ bind(&miss); | 2287 __ bind(&miss); |
2286 GenerateMissBranch(); | 2288 GenerateMissBranch(); |
2287 } | 2289 } |
2288 | 2290 |
2289 | 2291 |
2290 void CallStubCompiler::CompileHandlerBackend(Handle<JSFunction> function) { | 2292 void CallStubCompiler::CompileHandlerBackend(Handle<JSFunction> function) { |
2291 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) | 2293 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) |
2292 ? CALL_AS_FUNCTION | 2294 ? CALL_AS_FUNCTION |
2293 : CALL_AS_METHOD; | 2295 : CALL_AS_METHOD; |
2294 __ InvokeFunction(function, ParameterCount(function), arguments(), | 2296 ParameterCount expected(function); |
| 2297 __ InvokeFunction(function, expected, arguments(), |
2295 JUMP_FUNCTION, NullCallWrapper(), call_kind); | 2298 JUMP_FUNCTION, NullCallWrapper(), call_kind); |
2296 } | 2299 } |
2297 | 2300 |
2298 | 2301 |
2299 Handle<Code> CallStubCompiler::CompileCallConstant( | 2302 Handle<Code> CallStubCompiler::CompileCallConstant( |
2300 Handle<Object> object, | 2303 Handle<Object> object, |
2301 Handle<JSObject> holder, | 2304 Handle<JSObject> holder, |
2302 Handle<Name> name, | 2305 Handle<Name> name, |
2303 CheckType check, | 2306 CheckType check, |
2304 Handle<JSFunction> function) { | 2307 Handle<JSFunction> function) { |
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3473 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); | 3476 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); |
3474 } | 3477 } |
3475 } | 3478 } |
3476 | 3479 |
3477 | 3480 |
3478 #undef __ | 3481 #undef __ |
3479 | 3482 |
3480 } } // namespace v8::internal | 3483 } } // namespace v8::internal |
3481 | 3484 |
3482 #endif // V8_TARGET_ARCH_X64 | 3485 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |