| 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 1678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1689 | 1689 |
| 1690 // Handle call cache miss. | 1690 // Handle call cache miss. |
| 1691 __ bind(&miss); | 1691 __ bind(&miss); |
| 1692 GenerateMissBranch(); | 1692 GenerateMissBranch(); |
| 1693 | 1693 |
| 1694 // Return the generated code. | 1694 // Return the generated code. |
| 1695 return GetCode(Code::FIELD, name); | 1695 return GetCode(Code::FIELD, name); |
| 1696 } | 1696 } |
| 1697 | 1697 |
| 1698 | 1698 |
| 1699 Handle<Code> CallStubCompiler::CompileArrayCodeCall( |
| 1700 Handle<Object> object, |
| 1701 Handle<JSObject> holder, |
| 1702 Handle<Cell> cell, |
| 1703 Handle<JSFunction> function, |
| 1704 Handle<String> name, |
| 1705 Code::StubType type) { |
| 1706 Label miss; |
| 1707 |
| 1708 // Check that function is still array |
| 1709 const int argc = arguments().immediate(); |
| 1710 GenerateNameCheck(name, &miss); |
| 1711 |
| 1712 if (cell.is_null()) { |
| 1713 // Get the receiver from the stack. |
| 1714 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); |
| 1715 |
| 1716 // Check that the receiver isn't a smi. |
| 1717 __ JumpIfSmi(edx, &miss); |
| 1718 CheckPrototypes(Handle<JSObject>::cast(object), edx, holder, ebx, eax, edi, |
| 1719 name, &miss); |
| 1720 } else { |
| 1721 ASSERT(cell->value() == *function); |
| 1722 GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name, |
| 1723 &miss); |
| 1724 GenerateLoadFunctionFromCell(cell, function, &miss); |
| 1725 } |
| 1726 |
| 1727 Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate()); |
| 1728 Handle<Cell> kind_feedback_cell = |
| 1729 isolate()->factory()->NewCell(kind); |
| 1730 __ mov(eax, Immediate(argc)); |
| 1731 __ mov(ebx, kind_feedback_cell); |
| 1732 __ mov(edi, function); |
| 1733 |
| 1734 ArrayConstructorStub stub(isolate()); |
| 1735 __ TailCallStub(&stub); |
| 1736 |
| 1737 __ bind(&miss); |
| 1738 GenerateMissBranch(); |
| 1739 |
| 1740 // Return the generated code. |
| 1741 return GetCode(type, name); |
| 1742 } |
| 1743 |
| 1744 |
| 1699 Handle<Code> CallStubCompiler::CompileArrayPushCall( | 1745 Handle<Code> CallStubCompiler::CompileArrayPushCall( |
| 1700 Handle<Object> object, | 1746 Handle<Object> object, |
| 1701 Handle<JSObject> holder, | 1747 Handle<JSObject> holder, |
| 1702 Handle<Cell> cell, | 1748 Handle<Cell> cell, |
| 1703 Handle<JSFunction> function, | 1749 Handle<JSFunction> function, |
| 1704 Handle<String> name) { | 1750 Handle<String> name, |
| 1751 Code::StubType type) { |
| 1705 // ----------- S t a t e ------------- | 1752 // ----------- S t a t e ------------- |
| 1706 // -- ecx : name | 1753 // -- ecx : name |
| 1707 // -- esp[0] : return address | 1754 // -- esp[0] : return address |
| 1708 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 1755 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 1709 // -- ... | 1756 // -- ... |
| 1710 // -- esp[(argc + 1) * 4] : receiver | 1757 // -- esp[(argc + 1) * 4] : receiver |
| 1711 // ----------------------------------- | 1758 // ----------------------------------- |
| 1712 | 1759 |
| 1713 // If object is not an array, bail out to regular call. | 1760 // If object is not an array, bail out to regular call. |
| 1714 if (!object->IsJSArray() || !cell.is_null()) { | 1761 if (!object->IsJSArray() || !cell.is_null()) { |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 __ TailCallExternalReference( | 1990 __ TailCallExternalReference( |
| 1944 ExternalReference(Builtins::c_ArrayPush, isolate()), | 1991 ExternalReference(Builtins::c_ArrayPush, isolate()), |
| 1945 argc + 1, | 1992 argc + 1, |
| 1946 1); | 1993 1); |
| 1947 } | 1994 } |
| 1948 | 1995 |
| 1949 __ bind(&miss); | 1996 __ bind(&miss); |
| 1950 GenerateMissBranch(); | 1997 GenerateMissBranch(); |
| 1951 | 1998 |
| 1952 // Return the generated code. | 1999 // Return the generated code. |
| 1953 return GetCode(function); | 2000 return GetCode(type, name); |
| 1954 } | 2001 } |
| 1955 | 2002 |
| 1956 | 2003 |
| 1957 Handle<Code> CallStubCompiler::CompileArrayPopCall( | 2004 Handle<Code> CallStubCompiler::CompileArrayPopCall( |
| 1958 Handle<Object> object, | 2005 Handle<Object> object, |
| 1959 Handle<JSObject> holder, | 2006 Handle<JSObject> holder, |
| 1960 Handle<Cell> cell, | 2007 Handle<Cell> cell, |
| 1961 Handle<JSFunction> function, | 2008 Handle<JSFunction> function, |
| 1962 Handle<String> name) { | 2009 Handle<String> name, |
| 2010 Code::StubType type) { |
| 1963 // ----------- S t a t e ------------- | 2011 // ----------- S t a t e ------------- |
| 1964 // -- ecx : name | 2012 // -- ecx : name |
| 1965 // -- esp[0] : return address | 2013 // -- esp[0] : return address |
| 1966 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2014 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 1967 // -- ... | 2015 // -- ... |
| 1968 // -- esp[(argc + 1) * 4] : receiver | 2016 // -- esp[(argc + 1) * 4] : receiver |
| 1969 // ----------------------------------- | 2017 // ----------------------------------- |
| 1970 | 2018 |
| 1971 // If object is not an array, bail out to regular call. | 2019 // If object is not an array, bail out to regular call. |
| 1972 if (!object->IsJSArray() || !cell.is_null()) { | 2020 if (!object->IsJSArray() || !cell.is_null()) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2025 __ bind(&call_builtin); | 2073 __ bind(&call_builtin); |
| 2026 __ TailCallExternalReference( | 2074 __ TailCallExternalReference( |
| 2027 ExternalReference(Builtins::c_ArrayPop, isolate()), | 2075 ExternalReference(Builtins::c_ArrayPop, isolate()), |
| 2028 argc + 1, | 2076 argc + 1, |
| 2029 1); | 2077 1); |
| 2030 | 2078 |
| 2031 __ bind(&miss); | 2079 __ bind(&miss); |
| 2032 GenerateMissBranch(); | 2080 GenerateMissBranch(); |
| 2033 | 2081 |
| 2034 // Return the generated code. | 2082 // Return the generated code. |
| 2035 return GetCode(function); | 2083 return GetCode(type, name); |
| 2036 } | 2084 } |
| 2037 | 2085 |
| 2038 | 2086 |
| 2039 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( | 2087 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( |
| 2040 Handle<Object> object, | 2088 Handle<Object> object, |
| 2041 Handle<JSObject> holder, | 2089 Handle<JSObject> holder, |
| 2042 Handle<Cell> cell, | 2090 Handle<Cell> cell, |
| 2043 Handle<JSFunction> function, | 2091 Handle<JSFunction> function, |
| 2044 Handle<String> name) { | 2092 Handle<String> name, |
| 2093 Code::StubType type) { |
| 2045 // ----------- S t a t e ------------- | 2094 // ----------- S t a t e ------------- |
| 2046 // -- ecx : function name | 2095 // -- ecx : function name |
| 2047 // -- esp[0] : return address | 2096 // -- esp[0] : return address |
| 2048 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2097 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2049 // -- ... | 2098 // -- ... |
| 2050 // -- esp[(argc + 1) * 4] : receiver | 2099 // -- esp[(argc + 1) * 4] : receiver |
| 2051 // ----------------------------------- | 2100 // ----------------------------------- |
| 2052 | 2101 |
| 2053 // If object is not a string, bail out to regular call. | 2102 // If object is not a string, bail out to regular call. |
| 2054 if (!object->IsString() || !cell.is_null()) { | 2103 if (!object->IsString() || !cell.is_null()) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2109 __ ret((argc + 1) * kPointerSize); | 2158 __ ret((argc + 1) * kPointerSize); |
| 2110 } | 2159 } |
| 2111 | 2160 |
| 2112 __ bind(&miss); | 2161 __ bind(&miss); |
| 2113 // Restore function name in ecx. | 2162 // Restore function name in ecx. |
| 2114 __ Set(ecx, Immediate(name)); | 2163 __ Set(ecx, Immediate(name)); |
| 2115 __ bind(&name_miss); | 2164 __ bind(&name_miss); |
| 2116 GenerateMissBranch(); | 2165 GenerateMissBranch(); |
| 2117 | 2166 |
| 2118 // Return the generated code. | 2167 // Return the generated code. |
| 2119 return GetCode(function); | 2168 return GetCode(type, name); |
| 2120 } | 2169 } |
| 2121 | 2170 |
| 2122 | 2171 |
| 2123 Handle<Code> CallStubCompiler::CompileStringCharAtCall( | 2172 Handle<Code> CallStubCompiler::CompileStringCharAtCall( |
| 2124 Handle<Object> object, | 2173 Handle<Object> object, |
| 2125 Handle<JSObject> holder, | 2174 Handle<JSObject> holder, |
| 2126 Handle<Cell> cell, | 2175 Handle<Cell> cell, |
| 2127 Handle<JSFunction> function, | 2176 Handle<JSFunction> function, |
| 2128 Handle<String> name) { | 2177 Handle<String> name, |
| 2178 Code::StubType type) { |
| 2129 // ----------- S t a t e ------------- | 2179 // ----------- S t a t e ------------- |
| 2130 // -- ecx : function name | 2180 // -- ecx : function name |
| 2131 // -- esp[0] : return address | 2181 // -- esp[0] : return address |
| 2132 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2182 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2133 // -- ... | 2183 // -- ... |
| 2134 // -- esp[(argc + 1) * 4] : receiver | 2184 // -- esp[(argc + 1) * 4] : receiver |
| 2135 // ----------------------------------- | 2185 // ----------------------------------- |
| 2136 | 2186 |
| 2137 // If object is not a string, bail out to regular call. | 2187 // If object is not a string, bail out to regular call. |
| 2138 if (!object->IsString() || !cell.is_null()) { | 2188 if (!object->IsString() || !cell.is_null()) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2195 __ ret((argc + 1) * kPointerSize); | 2245 __ ret((argc + 1) * kPointerSize); |
| 2196 } | 2246 } |
| 2197 | 2247 |
| 2198 __ bind(&miss); | 2248 __ bind(&miss); |
| 2199 // Restore function name in ecx. | 2249 // Restore function name in ecx. |
| 2200 __ Set(ecx, Immediate(name)); | 2250 __ Set(ecx, Immediate(name)); |
| 2201 __ bind(&name_miss); | 2251 __ bind(&name_miss); |
| 2202 GenerateMissBranch(); | 2252 GenerateMissBranch(); |
| 2203 | 2253 |
| 2204 // Return the generated code. | 2254 // Return the generated code. |
| 2205 return GetCode(function); | 2255 return GetCode(type, name); |
| 2206 } | 2256 } |
| 2207 | 2257 |
| 2208 | 2258 |
| 2209 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( | 2259 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( |
| 2210 Handle<Object> object, | 2260 Handle<Object> object, |
| 2211 Handle<JSObject> holder, | 2261 Handle<JSObject> holder, |
| 2212 Handle<Cell> cell, | 2262 Handle<Cell> cell, |
| 2213 Handle<JSFunction> function, | 2263 Handle<JSFunction> function, |
| 2214 Handle<String> name) { | 2264 Handle<String> name, |
| 2265 Code::StubType type) { |
| 2215 // ----------- S t a t e ------------- | 2266 // ----------- S t a t e ------------- |
| 2216 // -- ecx : function name | 2267 // -- ecx : function name |
| 2217 // -- esp[0] : return address | 2268 // -- esp[0] : return address |
| 2218 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2269 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2219 // -- ... | 2270 // -- ... |
| 2220 // -- esp[(argc + 1) * 4] : receiver | 2271 // -- esp[(argc + 1) * 4] : receiver |
| 2221 // ----------------------------------- | 2272 // ----------------------------------- |
| 2222 | 2273 |
| 2223 const int argc = arguments().immediate(); | 2274 const int argc = arguments().immediate(); |
| 2224 | 2275 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2271 : CALL_AS_METHOD; | 2322 : CALL_AS_METHOD; |
| 2272 ParameterCount expected(function); | 2323 ParameterCount expected(function); |
| 2273 __ InvokeFunction(function, expected, arguments(), | 2324 __ InvokeFunction(function, expected, arguments(), |
| 2274 JUMP_FUNCTION, NullCallWrapper(), call_kind); | 2325 JUMP_FUNCTION, NullCallWrapper(), call_kind); |
| 2275 | 2326 |
| 2276 __ bind(&miss); | 2327 __ bind(&miss); |
| 2277 // ecx: function name. | 2328 // ecx: function name. |
| 2278 GenerateMissBranch(); | 2329 GenerateMissBranch(); |
| 2279 | 2330 |
| 2280 // Return the generated code. | 2331 // Return the generated code. |
| 2281 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2332 return GetCode(type, name); |
| 2282 } | 2333 } |
| 2283 | 2334 |
| 2284 | 2335 |
| 2285 Handle<Code> CallStubCompiler::CompileMathFloorCall( | 2336 Handle<Code> CallStubCompiler::CompileMathFloorCall( |
| 2286 Handle<Object> object, | 2337 Handle<Object> object, |
| 2287 Handle<JSObject> holder, | 2338 Handle<JSObject> holder, |
| 2288 Handle<Cell> cell, | 2339 Handle<Cell> cell, |
| 2289 Handle<JSFunction> function, | 2340 Handle<JSFunction> function, |
| 2290 Handle<String> name) { | 2341 Handle<String> name, |
| 2342 Code::StubType type) { |
| 2291 // ----------- S t a t e ------------- | 2343 // ----------- S t a t e ------------- |
| 2292 // -- ecx : name | 2344 // -- ecx : name |
| 2293 // -- esp[0] : return address | 2345 // -- esp[0] : return address |
| 2294 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2346 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2295 // -- ... | 2347 // -- ... |
| 2296 // -- esp[(argc + 1) * 4] : receiver | 2348 // -- esp[(argc + 1) * 4] : receiver |
| 2297 // ----------------------------------- | 2349 // ----------------------------------- |
| 2298 | 2350 |
| 2299 if (!CpuFeatures::IsSupported(SSE2)) { | 2351 if (!CpuFeatures::IsSupported(SSE2)) { |
| 2300 return Handle<Code>::null(); | 2352 return Handle<Code>::null(); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2402 __ bind(&slow); | 2454 __ bind(&slow); |
| 2403 ParameterCount expected(function); | 2455 ParameterCount expected(function); |
| 2404 __ InvokeFunction(function, expected, arguments(), | 2456 __ InvokeFunction(function, expected, arguments(), |
| 2405 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2457 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2406 | 2458 |
| 2407 __ bind(&miss); | 2459 __ bind(&miss); |
| 2408 // ecx: function name. | 2460 // ecx: function name. |
| 2409 GenerateMissBranch(); | 2461 GenerateMissBranch(); |
| 2410 | 2462 |
| 2411 // Return the generated code. | 2463 // Return the generated code. |
| 2412 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2464 return GetCode(type, name); |
| 2413 } | 2465 } |
| 2414 | 2466 |
| 2415 | 2467 |
| 2416 Handle<Code> CallStubCompiler::CompileMathAbsCall( | 2468 Handle<Code> CallStubCompiler::CompileMathAbsCall( |
| 2417 Handle<Object> object, | 2469 Handle<Object> object, |
| 2418 Handle<JSObject> holder, | 2470 Handle<JSObject> holder, |
| 2419 Handle<Cell> cell, | 2471 Handle<Cell> cell, |
| 2420 Handle<JSFunction> function, | 2472 Handle<JSFunction> function, |
| 2421 Handle<String> name) { | 2473 Handle<String> name, |
| 2474 Code::StubType type) { |
| 2422 // ----------- S t a t e ------------- | 2475 // ----------- S t a t e ------------- |
| 2423 // -- ecx : name | 2476 // -- ecx : name |
| 2424 // -- esp[0] : return address | 2477 // -- esp[0] : return address |
| 2425 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2478 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2426 // -- ... | 2479 // -- ... |
| 2427 // -- esp[(argc + 1) * 4] : receiver | 2480 // -- esp[(argc + 1) * 4] : receiver |
| 2428 // ----------------------------------- | 2481 // ----------------------------------- |
| 2429 | 2482 |
| 2430 const int argc = arguments().immediate(); | 2483 const int argc = arguments().immediate(); |
| 2431 | 2484 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2508 __ bind(&slow); | 2561 __ bind(&slow); |
| 2509 ParameterCount expected(function); | 2562 ParameterCount expected(function); |
| 2510 __ InvokeFunction(function, expected, arguments(), | 2563 __ InvokeFunction(function, expected, arguments(), |
| 2511 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2564 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2512 | 2565 |
| 2513 __ bind(&miss); | 2566 __ bind(&miss); |
| 2514 // ecx: function name. | 2567 // ecx: function name. |
| 2515 GenerateMissBranch(); | 2568 GenerateMissBranch(); |
| 2516 | 2569 |
| 2517 // Return the generated code. | 2570 // Return the generated code. |
| 2518 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2571 return GetCode(type, name); |
| 2519 } | 2572 } |
| 2520 | 2573 |
| 2521 | 2574 |
| 2522 Handle<Code> CallStubCompiler::CompileFastApiCall( | 2575 Handle<Code> CallStubCompiler::CompileFastApiCall( |
| 2523 const CallOptimization& optimization, | 2576 const CallOptimization& optimization, |
| 2524 Handle<Object> object, | 2577 Handle<Object> object, |
| 2525 Handle<JSObject> holder, | 2578 Handle<JSObject> holder, |
| 2526 Handle<Cell> cell, | 2579 Handle<Cell> cell, |
| 2527 Handle<JSFunction> function, | 2580 Handle<JSFunction> function, |
| 2528 Handle<String> name) { | 2581 Handle<String> name) { |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2699 Handle<Code> CallStubCompiler::CompileCallConstant( | 2752 Handle<Code> CallStubCompiler::CompileCallConstant( |
| 2700 Handle<Object> object, | 2753 Handle<Object> object, |
| 2701 Handle<JSObject> holder, | 2754 Handle<JSObject> holder, |
| 2702 Handle<Name> name, | 2755 Handle<Name> name, |
| 2703 CheckType check, | 2756 CheckType check, |
| 2704 Handle<JSFunction> function) { | 2757 Handle<JSFunction> function) { |
| 2705 | 2758 |
| 2706 if (HasCustomCallGenerator(function)) { | 2759 if (HasCustomCallGenerator(function)) { |
| 2707 Handle<Code> code = CompileCustomCall(object, holder, | 2760 Handle<Code> code = CompileCustomCall(object, holder, |
| 2708 Handle<Cell>::null(), | 2761 Handle<Cell>::null(), |
| 2709 function, Handle<String>::cast(name)); | 2762 function, Handle<String>::cast(name), |
| 2763 Code::CONSTANT_FUNCTION); |
| 2710 // A null handle means bail out to the regular compiler code below. | 2764 // A null handle means bail out to the regular compiler code below. |
| 2711 if (!code.is_null()) return code; | 2765 if (!code.is_null()) return code; |
| 2712 } | 2766 } |
| 2713 | 2767 |
| 2714 Label success; | 2768 Label success; |
| 2715 | 2769 |
| 2716 CompileHandlerFrontend(object, holder, name, check, &success); | 2770 CompileHandlerFrontend(object, holder, name, check, &success); |
| 2717 __ bind(&success); | 2771 __ bind(&success); |
| 2718 CompileHandlerBackend(function); | 2772 CompileHandlerBackend(function); |
| 2719 | 2773 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2790 // ----------- S t a t e ------------- | 2844 // ----------- S t a t e ------------- |
| 2791 // -- ecx : name | 2845 // -- ecx : name |
| 2792 // -- esp[0] : return address | 2846 // -- esp[0] : return address |
| 2793 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2847 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
| 2794 // -- ... | 2848 // -- ... |
| 2795 // -- esp[(argc + 1) * 4] : receiver | 2849 // -- esp[(argc + 1) * 4] : receiver |
| 2796 // ----------------------------------- | 2850 // ----------------------------------- |
| 2797 | 2851 |
| 2798 if (HasCustomCallGenerator(function)) { | 2852 if (HasCustomCallGenerator(function)) { |
| 2799 Handle<Code> code = CompileCustomCall( | 2853 Handle<Code> code = CompileCustomCall( |
| 2800 object, holder, cell, function, Handle<String>::cast(name)); | 2854 object, holder, cell, function, Handle<String>::cast(name), |
| 2855 Code::NORMAL); |
| 2801 // A null handle means bail out to the regular compiler code below. | 2856 // A null handle means bail out to the regular compiler code below. |
| 2802 if (!code.is_null()) return code; | 2857 if (!code.is_null()) return code; |
| 2803 } | 2858 } |
| 2804 | 2859 |
| 2805 Label miss; | 2860 Label miss; |
| 2806 GenerateNameCheck(name, &miss); | 2861 GenerateNameCheck(name, &miss); |
| 2807 | 2862 |
| 2808 // Get the number of arguments. | 2863 // Get the number of arguments. |
| 2809 const int argc = arguments().immediate(); | 2864 const int argc = arguments().immediate(); |
| 2810 GenerateGlobalReceiverCheck(object, holder, name, &miss); | 2865 GenerateGlobalReceiverCheck(object, holder, name, &miss); |
| (...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3775 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); | 3830 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); |
| 3776 } | 3831 } |
| 3777 } | 3832 } |
| 3778 | 3833 |
| 3779 | 3834 |
| 3780 #undef __ | 3835 #undef __ |
| 3781 | 3836 |
| 3782 } } // namespace v8::internal | 3837 } } // namespace v8::internal |
| 3783 | 3838 |
| 3784 #endif // V8_TARGET_ARCH_IA32 | 3839 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |