| 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 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1691 | 1691 |
| 1692 // Handle call cache miss. | 1692 // Handle call cache miss. |
| 1693 __ bind(&miss); | 1693 __ bind(&miss); |
| 1694 GenerateMissBranch(); | 1694 GenerateMissBranch(); |
| 1695 | 1695 |
| 1696 // Return the generated code. | 1696 // Return the generated code. |
| 1697 return GetCode(Code::FIELD, name); | 1697 return GetCode(Code::FIELD, name); |
| 1698 } | 1698 } |
| 1699 | 1699 |
| 1700 | 1700 |
| 1701 Handle<Code> CallStubCompiler::CompileArrayCodeCall( |
| 1702 Handle<Object> object, |
| 1703 Handle<JSObject> holder, |
| 1704 Handle<Cell> cell, |
| 1705 Handle<JSFunction> function, |
| 1706 Handle<String> name, |
| 1707 Code::StubType type) { |
| 1708 Label miss; |
| 1709 |
| 1710 // Check that function is still array |
| 1711 const int argc = arguments().immediate(); |
| 1712 GenerateNameCheck(name, &miss); |
| 1713 Register receiver = r1; |
| 1714 |
| 1715 if (cell.is_null()) { |
| 1716 __ ldr(receiver, MemOperand(sp, argc * kPointerSize)); |
| 1717 |
| 1718 // Check that the receiver isn't a smi. |
| 1719 __ JumpIfSmi(receiver, &miss); |
| 1720 |
| 1721 // Check that the maps haven't changed. |
| 1722 CheckPrototypes(Handle<JSObject>::cast(object), receiver, holder, r3, r0, |
| 1723 r4, name, &miss); |
| 1724 } else { |
| 1725 ASSERT(cell->value() == *function); |
| 1726 GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name, |
| 1727 &miss); |
| 1728 GenerateLoadFunctionFromCell(cell, function, &miss); |
| 1729 } |
| 1730 |
| 1731 Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate()); |
| 1732 Handle<Cell> kind_feedback_cell = |
| 1733 isolate()->factory()->NewCell(kind); |
| 1734 __ mov(r0, Operand(argc)); |
| 1735 __ mov(r2, Operand(kind_feedback_cell)); |
| 1736 __ mov(r1, Operand(function)); |
| 1737 |
| 1738 ArrayConstructorStub stub(isolate()); |
| 1739 __ TailCallStub(&stub); |
| 1740 |
| 1741 __ bind(&miss); |
| 1742 GenerateMissBranch(); |
| 1743 |
| 1744 // Return the generated code. |
| 1745 return GetCode(type, name); |
| 1746 } |
| 1747 |
| 1748 |
| 1701 Handle<Code> CallStubCompiler::CompileArrayPushCall( | 1749 Handle<Code> CallStubCompiler::CompileArrayPushCall( |
| 1702 Handle<Object> object, | 1750 Handle<Object> object, |
| 1703 Handle<JSObject> holder, | 1751 Handle<JSObject> holder, |
| 1704 Handle<Cell> cell, | 1752 Handle<Cell> cell, |
| 1705 Handle<JSFunction> function, | 1753 Handle<JSFunction> function, |
| 1706 Handle<String> name) { | 1754 Handle<String> name, |
| 1755 Code::StubType type) { |
| 1707 // ----------- S t a t e ------------- | 1756 // ----------- S t a t e ------------- |
| 1708 // -- r2 : name | 1757 // -- r2 : name |
| 1709 // -- lr : return address | 1758 // -- lr : return address |
| 1710 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 1759 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 1711 // -- ... | 1760 // -- ... |
| 1712 // -- sp[argc * 4] : receiver | 1761 // -- sp[argc * 4] : receiver |
| 1713 // ----------------------------------- | 1762 // ----------------------------------- |
| 1714 | 1763 |
| 1715 // If object is not an array, bail out to regular call. | 1764 // If object is not an array, bail out to regular call. |
| 1716 if (!object->IsJSArray() || !cell.is_null()) return Handle<Code>::null(); | 1765 if (!object->IsJSArray() || !cell.is_null()) return Handle<Code>::null(); |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 __ bind(&call_builtin); | 1989 __ bind(&call_builtin); |
| 1941 __ TailCallExternalReference( | 1990 __ TailCallExternalReference( |
| 1942 ExternalReference(Builtins::c_ArrayPush, isolate()), argc + 1, 1); | 1991 ExternalReference(Builtins::c_ArrayPush, isolate()), argc + 1, 1); |
| 1943 } | 1992 } |
| 1944 | 1993 |
| 1945 // Handle call cache miss. | 1994 // Handle call cache miss. |
| 1946 __ bind(&miss); | 1995 __ bind(&miss); |
| 1947 GenerateMissBranch(); | 1996 GenerateMissBranch(); |
| 1948 | 1997 |
| 1949 // Return the generated code. | 1998 // Return the generated code. |
| 1950 return GetCode(function); | 1999 return GetCode(type, name); |
| 1951 } | 2000 } |
| 1952 | 2001 |
| 1953 | 2002 |
| 1954 Handle<Code> CallStubCompiler::CompileArrayPopCall( | 2003 Handle<Code> CallStubCompiler::CompileArrayPopCall( |
| 1955 Handle<Object> object, | 2004 Handle<Object> object, |
| 1956 Handle<JSObject> holder, | 2005 Handle<JSObject> holder, |
| 1957 Handle<Cell> cell, | 2006 Handle<Cell> cell, |
| 1958 Handle<JSFunction> function, | 2007 Handle<JSFunction> function, |
| 1959 Handle<String> name) { | 2008 Handle<String> name, |
| 2009 Code::StubType type) { |
| 1960 // ----------- S t a t e ------------- | 2010 // ----------- S t a t e ------------- |
| 1961 // -- r2 : name | 2011 // -- r2 : name |
| 1962 // -- lr : return address | 2012 // -- lr : return address |
| 1963 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2013 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 1964 // -- ... | 2014 // -- ... |
| 1965 // -- sp[argc * 4] : receiver | 2015 // -- sp[argc * 4] : receiver |
| 1966 // ----------------------------------- | 2016 // ----------------------------------- |
| 1967 | 2017 |
| 1968 // If object is not an array, bail out to regular call. | 2018 // If object is not an array, bail out to regular call. |
| 1969 if (!object->IsJSArray() || !cell.is_null()) return Handle<Code>::null(); | 2019 if (!object->IsJSArray() || !cell.is_null()) return Handle<Code>::null(); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2022 | 2072 |
| 2023 __ bind(&call_builtin); | 2073 __ bind(&call_builtin); |
| 2024 __ TailCallExternalReference( | 2074 __ TailCallExternalReference( |
| 2025 ExternalReference(Builtins::c_ArrayPop, isolate()), argc + 1, 1); | 2075 ExternalReference(Builtins::c_ArrayPop, isolate()), argc + 1, 1); |
| 2026 | 2076 |
| 2027 // Handle call cache miss. | 2077 // Handle call cache miss. |
| 2028 __ bind(&miss); | 2078 __ bind(&miss); |
| 2029 GenerateMissBranch(); | 2079 GenerateMissBranch(); |
| 2030 | 2080 |
| 2031 // Return the generated code. | 2081 // Return the generated code. |
| 2032 return GetCode(function); | 2082 return GetCode(type, name); |
| 2033 } | 2083 } |
| 2034 | 2084 |
| 2035 | 2085 |
| 2036 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( | 2086 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( |
| 2037 Handle<Object> object, | 2087 Handle<Object> object, |
| 2038 Handle<JSObject> holder, | 2088 Handle<JSObject> holder, |
| 2039 Handle<Cell> cell, | 2089 Handle<Cell> cell, |
| 2040 Handle<JSFunction> function, | 2090 Handle<JSFunction> function, |
| 2041 Handle<String> name) { | 2091 Handle<String> name, |
| 2092 Code::StubType type) { |
| 2042 // ----------- S t a t e ------------- | 2093 // ----------- S t a t e ------------- |
| 2043 // -- r2 : function name | 2094 // -- r2 : function name |
| 2044 // -- lr : return address | 2095 // -- lr : return address |
| 2045 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2096 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 2046 // -- ... | 2097 // -- ... |
| 2047 // -- sp[argc * 4] : receiver | 2098 // -- sp[argc * 4] : receiver |
| 2048 // ----------------------------------- | 2099 // ----------------------------------- |
| 2049 | 2100 |
| 2050 // If object is not a string, bail out to regular call. | 2101 // If object is not a string, bail out to regular call. |
| 2051 if (!object->IsString() || !cell.is_null()) return Handle<Code>::null(); | 2102 if (!object->IsString() || !cell.is_null()) return Handle<Code>::null(); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2104 __ Ret(); | 2155 __ Ret(); |
| 2105 } | 2156 } |
| 2106 | 2157 |
| 2107 __ bind(&miss); | 2158 __ bind(&miss); |
| 2108 // Restore function name in r2. | 2159 // Restore function name in r2. |
| 2109 __ Move(r2, name); | 2160 __ Move(r2, name); |
| 2110 __ bind(&name_miss); | 2161 __ bind(&name_miss); |
| 2111 GenerateMissBranch(); | 2162 GenerateMissBranch(); |
| 2112 | 2163 |
| 2113 // Return the generated code. | 2164 // Return the generated code. |
| 2114 return GetCode(function); | 2165 return GetCode(type, name); |
| 2115 } | 2166 } |
| 2116 | 2167 |
| 2117 | 2168 |
| 2118 Handle<Code> CallStubCompiler::CompileStringCharAtCall( | 2169 Handle<Code> CallStubCompiler::CompileStringCharAtCall( |
| 2119 Handle<Object> object, | 2170 Handle<Object> object, |
| 2120 Handle<JSObject> holder, | 2171 Handle<JSObject> holder, |
| 2121 Handle<Cell> cell, | 2172 Handle<Cell> cell, |
| 2122 Handle<JSFunction> function, | 2173 Handle<JSFunction> function, |
| 2123 Handle<String> name) { | 2174 Handle<String> name, |
| 2175 Code::StubType type) { |
| 2124 // ----------- S t a t e ------------- | 2176 // ----------- S t a t e ------------- |
| 2125 // -- r2 : function name | 2177 // -- r2 : function name |
| 2126 // -- lr : return address | 2178 // -- lr : return address |
| 2127 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2179 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 2128 // -- ... | 2180 // -- ... |
| 2129 // -- sp[argc * 4] : receiver | 2181 // -- sp[argc * 4] : receiver |
| 2130 // ----------------------------------- | 2182 // ----------------------------------- |
| 2131 | 2183 |
| 2132 // If object is not a string, bail out to regular call. | 2184 // If object is not a string, bail out to regular call. |
| 2133 if (!object->IsString() || !cell.is_null()) return Handle<Code>::null(); | 2185 if (!object->IsString() || !cell.is_null()) return Handle<Code>::null(); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2187 __ Ret(); | 2239 __ Ret(); |
| 2188 } | 2240 } |
| 2189 | 2241 |
| 2190 __ bind(&miss); | 2242 __ bind(&miss); |
| 2191 // Restore function name in r2. | 2243 // Restore function name in r2. |
| 2192 __ Move(r2, name); | 2244 __ Move(r2, name); |
| 2193 __ bind(&name_miss); | 2245 __ bind(&name_miss); |
| 2194 GenerateMissBranch(); | 2246 GenerateMissBranch(); |
| 2195 | 2247 |
| 2196 // Return the generated code. | 2248 // Return the generated code. |
| 2197 return GetCode(function); | 2249 return GetCode(type, name); |
| 2198 } | 2250 } |
| 2199 | 2251 |
| 2200 | 2252 |
| 2201 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( | 2253 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( |
| 2202 Handle<Object> object, | 2254 Handle<Object> object, |
| 2203 Handle<JSObject> holder, | 2255 Handle<JSObject> holder, |
| 2204 Handle<Cell> cell, | 2256 Handle<Cell> cell, |
| 2205 Handle<JSFunction> function, | 2257 Handle<JSFunction> function, |
| 2206 Handle<String> name) { | 2258 Handle<String> name, |
| 2259 Code::StubType type) { |
| 2207 // ----------- S t a t e ------------- | 2260 // ----------- S t a t e ------------- |
| 2208 // -- r2 : function name | 2261 // -- r2 : function name |
| 2209 // -- lr : return address | 2262 // -- lr : return address |
| 2210 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2263 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 2211 // -- ... | 2264 // -- ... |
| 2212 // -- sp[argc * 4] : receiver | 2265 // -- sp[argc * 4] : receiver |
| 2213 // ----------------------------------- | 2266 // ----------------------------------- |
| 2214 | 2267 |
| 2215 const int argc = arguments().immediate(); | 2268 const int argc = arguments().immediate(); |
| 2216 | 2269 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2259 __ bind(&slow); | 2312 __ bind(&slow); |
| 2260 ParameterCount expected(function); | 2313 ParameterCount expected(function); |
| 2261 __ InvokeFunction(function, expected, arguments(), | 2314 __ InvokeFunction(function, expected, arguments(), |
| 2262 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2315 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2263 | 2316 |
| 2264 __ bind(&miss); | 2317 __ bind(&miss); |
| 2265 // r2: function name. | 2318 // r2: function name. |
| 2266 GenerateMissBranch(); | 2319 GenerateMissBranch(); |
| 2267 | 2320 |
| 2268 // Return the generated code. | 2321 // Return the generated code. |
| 2269 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2322 return GetCode(type, name); |
| 2270 } | 2323 } |
| 2271 | 2324 |
| 2272 | 2325 |
| 2273 Handle<Code> CallStubCompiler::CompileMathFloorCall( | 2326 Handle<Code> CallStubCompiler::CompileMathFloorCall( |
| 2274 Handle<Object> object, | 2327 Handle<Object> object, |
| 2275 Handle<JSObject> holder, | 2328 Handle<JSObject> holder, |
| 2276 Handle<Cell> cell, | 2329 Handle<Cell> cell, |
| 2277 Handle<JSFunction> function, | 2330 Handle<JSFunction> function, |
| 2278 Handle<String> name) { | 2331 Handle<String> name, |
| 2332 Code::StubType type) { |
| 2279 // ----------- S t a t e ------------- | 2333 // ----------- S t a t e ------------- |
| 2280 // -- r2 : function name | 2334 // -- r2 : function name |
| 2281 // -- lr : return address | 2335 // -- lr : return address |
| 2282 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2336 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 2283 // -- ... | 2337 // -- ... |
| 2284 // -- sp[argc * 4] : receiver | 2338 // -- sp[argc * 4] : receiver |
| 2285 // ----------------------------------- | 2339 // ----------------------------------- |
| 2286 | 2340 |
| 2287 const int argc = arguments().immediate(); | 2341 const int argc = arguments().immediate(); |
| 2288 // If the object is not a JSObject or we got an unexpected number of | 2342 // If the object is not a JSObject or we got an unexpected number of |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2367 // because the function makes no use of it. | 2421 // because the function makes no use of it. |
| 2368 ParameterCount expected(function); | 2422 ParameterCount expected(function); |
| 2369 __ InvokeFunction(function, expected, arguments(), | 2423 __ InvokeFunction(function, expected, arguments(), |
| 2370 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2424 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2371 | 2425 |
| 2372 __ bind(&miss); | 2426 __ bind(&miss); |
| 2373 // r2: function name. | 2427 // r2: function name. |
| 2374 GenerateMissBranch(); | 2428 GenerateMissBranch(); |
| 2375 | 2429 |
| 2376 // Return the generated code. | 2430 // Return the generated code. |
| 2377 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2431 return GetCode(type, name); |
| 2378 } | 2432 } |
| 2379 | 2433 |
| 2380 | 2434 |
| 2381 Handle<Code> CallStubCompiler::CompileMathAbsCall( | 2435 Handle<Code> CallStubCompiler::CompileMathAbsCall( |
| 2382 Handle<Object> object, | 2436 Handle<Object> object, |
| 2383 Handle<JSObject> holder, | 2437 Handle<JSObject> holder, |
| 2384 Handle<Cell> cell, | 2438 Handle<Cell> cell, |
| 2385 Handle<JSFunction> function, | 2439 Handle<JSFunction> function, |
| 2386 Handle<String> name) { | 2440 Handle<String> name, |
| 2441 Code::StubType type) { |
| 2387 // ----------- S t a t e ------------- | 2442 // ----------- S t a t e ------------- |
| 2388 // -- r2 : function name | 2443 // -- r2 : function name |
| 2389 // -- lr : return address | 2444 // -- lr : return address |
| 2390 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) | 2445 // -- sp[(argc - n - 1) * 4] : arg[n] (zero-based) |
| 2391 // -- ... | 2446 // -- ... |
| 2392 // -- sp[argc * 4] : receiver | 2447 // -- sp[argc * 4] : receiver |
| 2393 // ----------------------------------- | 2448 // ----------------------------------- |
| 2394 | 2449 |
| 2395 const int argc = arguments().immediate(); | 2450 const int argc = arguments().immediate(); |
| 2396 // If the object is not a JSObject or we got an unexpected number of | 2451 // If the object is not a JSObject or we got an unexpected number of |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2465 __ bind(&slow); | 2520 __ bind(&slow); |
| 2466 ParameterCount expected(function); | 2521 ParameterCount expected(function); |
| 2467 __ InvokeFunction(function, expected, arguments(), | 2522 __ InvokeFunction(function, expected, arguments(), |
| 2468 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2523 JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2469 | 2524 |
| 2470 __ bind(&miss); | 2525 __ bind(&miss); |
| 2471 // r2: function name. | 2526 // r2: function name. |
| 2472 GenerateMissBranch(); | 2527 GenerateMissBranch(); |
| 2473 | 2528 |
| 2474 // Return the generated code. | 2529 // Return the generated code. |
| 2475 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2530 return GetCode(type, name); |
| 2476 } | 2531 } |
| 2477 | 2532 |
| 2478 | 2533 |
| 2479 Handle<Code> CallStubCompiler::CompileFastApiCall( | 2534 Handle<Code> CallStubCompiler::CompileFastApiCall( |
| 2480 const CallOptimization& optimization, | 2535 const CallOptimization& optimization, |
| 2481 Handle<Object> object, | 2536 Handle<Object> object, |
| 2482 Handle<JSObject> holder, | 2537 Handle<JSObject> holder, |
| 2483 Handle<Cell> cell, | 2538 Handle<Cell> cell, |
| 2484 Handle<JSFunction> function, | 2539 Handle<JSFunction> function, |
| 2485 Handle<String> name) { | 2540 Handle<String> name) { |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2646 | 2701 |
| 2647 Handle<Code> CallStubCompiler::CompileCallConstant( | 2702 Handle<Code> CallStubCompiler::CompileCallConstant( |
| 2648 Handle<Object> object, | 2703 Handle<Object> object, |
| 2649 Handle<JSObject> holder, | 2704 Handle<JSObject> holder, |
| 2650 Handle<Name> name, | 2705 Handle<Name> name, |
| 2651 CheckType check, | 2706 CheckType check, |
| 2652 Handle<JSFunction> function) { | 2707 Handle<JSFunction> function) { |
| 2653 if (HasCustomCallGenerator(function)) { | 2708 if (HasCustomCallGenerator(function)) { |
| 2654 Handle<Code> code = CompileCustomCall(object, holder, | 2709 Handle<Code> code = CompileCustomCall(object, holder, |
| 2655 Handle<Cell>::null(), | 2710 Handle<Cell>::null(), |
| 2656 function, Handle<String>::cast(name)); | 2711 function, Handle<String>::cast(name), |
| 2712 Code::CONSTANT_FUNCTION); |
| 2657 // A null handle means bail out to the regular compiler code below. | 2713 // A null handle means bail out to the regular compiler code below. |
| 2658 if (!code.is_null()) return code; | 2714 if (!code.is_null()) return code; |
| 2659 } | 2715 } |
| 2660 | 2716 |
| 2661 Label success; | 2717 Label success; |
| 2662 | 2718 |
| 2663 CompileHandlerFrontend(object, holder, name, check, &success); | 2719 CompileHandlerFrontend(object, holder, name, check, &success); |
| 2664 __ bind(&success); | 2720 __ bind(&success); |
| 2665 CompileHandlerBackend(function); | 2721 CompileHandlerBackend(function); |
| 2666 | 2722 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2712 Handle<GlobalObject> holder, | 2768 Handle<GlobalObject> holder, |
| 2713 Handle<PropertyCell> cell, | 2769 Handle<PropertyCell> cell, |
| 2714 Handle<JSFunction> function, | 2770 Handle<JSFunction> function, |
| 2715 Handle<Name> name) { | 2771 Handle<Name> name) { |
| 2716 // ----------- S t a t e ------------- | 2772 // ----------- S t a t e ------------- |
| 2717 // -- r2 : name | 2773 // -- r2 : name |
| 2718 // -- lr : return address | 2774 // -- lr : return address |
| 2719 // ----------------------------------- | 2775 // ----------------------------------- |
| 2720 if (HasCustomCallGenerator(function)) { | 2776 if (HasCustomCallGenerator(function)) { |
| 2721 Handle<Code> code = CompileCustomCall( | 2777 Handle<Code> code = CompileCustomCall( |
| 2722 object, holder, cell, function, Handle<String>::cast(name)); | 2778 object, holder, cell, function, Handle<String>::cast(name), |
| 2779 Code::NORMAL); |
| 2723 // A null handle means bail out to the regular compiler code below. | 2780 // A null handle means bail out to the regular compiler code below. |
| 2724 if (!code.is_null()) return code; | 2781 if (!code.is_null()) return code; |
| 2725 } | 2782 } |
| 2726 | 2783 |
| 2727 Label miss; | 2784 Label miss; |
| 2728 GenerateNameCheck(name, &miss); | 2785 GenerateNameCheck(name, &miss); |
| 2729 | 2786 |
| 2730 // Get the number of arguments. | 2787 // Get the number of arguments. |
| 2731 const int argc = arguments().immediate(); | 2788 const int argc = arguments().immediate(); |
| 2732 GenerateGlobalReceiverCheck(object, holder, name, &miss); | 2789 GenerateGlobalReceiverCheck(object, holder, name, &miss); |
| (...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3678 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); | 3735 TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); |
| 3679 } | 3736 } |
| 3680 } | 3737 } |
| 3681 | 3738 |
| 3682 | 3739 |
| 3683 #undef __ | 3740 #undef __ |
| 3684 | 3741 |
| 3685 } } // namespace v8::internal | 3742 } } // namespace v8::internal |
| 3686 | 3743 |
| 3687 #endif // V8_TARGET_ARCH_ARM | 3744 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |