| 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 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1558   __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); | 1558   __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); | 
| 1559 | 1559 | 
| 1560 | 1560 | 
| 1561   // Check that the maps haven't changed. | 1561   // Check that the maps haven't changed. | 
| 1562   __ JumpIfSmi(edx, miss); | 1562   __ JumpIfSmi(edx, miss); | 
| 1563   CheckPrototypes(object, edx, holder, ebx, eax, edi, name, miss); | 1563   CheckPrototypes(object, edx, holder, ebx, eax, edi, name, miss); | 
| 1564 } | 1564 } | 
| 1565 | 1565 | 
| 1566 | 1566 | 
| 1567 void CallStubCompiler::GenerateLoadFunctionFromCell( | 1567 void CallStubCompiler::GenerateLoadFunctionFromCell( | 
| 1568     Handle<JSGlobalPropertyCell> cell, | 1568     Handle<Cell> cell, | 
| 1569     Handle<JSFunction> function, | 1569     Handle<JSFunction> function, | 
| 1570     Label* miss) { | 1570     Label* miss) { | 
| 1571   // Get the value from the cell. | 1571   // Get the value from the cell. | 
| 1572   if (Serializer::enabled()) { | 1572   if (Serializer::enabled()) { | 
| 1573     __ mov(edi, Immediate(cell)); | 1573     __ mov(edi, Immediate(cell)); | 
| 1574     __ mov(edi, FieldOperand(edi, JSGlobalPropertyCell::kValueOffset)); | 1574     __ mov(edi, FieldOperand(edi, Cell::kValueOffset)); | 
| 1575   } else { | 1575   } else { | 
| 1576     __ mov(edi, Operand::Cell(cell)); | 1576     __ mov(edi, Operand::Cell(cell)); | 
| 1577   } | 1577   } | 
| 1578 | 1578 | 
| 1579   // Check that the cell contains the same function. | 1579   // Check that the cell contains the same function. | 
| 1580   if (isolate()->heap()->InNewSpace(*function)) { | 1580   if (isolate()->heap()->InNewSpace(*function)) { | 
| 1581     // We can't embed a pointer to a function in new space so we have | 1581     // We can't embed a pointer to a function in new space so we have | 
| 1582     // to verify that the shared function info is unchanged. This has | 1582     // to verify that the shared function info is unchanged. This has | 
| 1583     // the nice side effect that multiple closures based on the same | 1583     // the nice side effect that multiple closures based on the same | 
| 1584     // function can all use this call IC. Before we load through the | 1584     // function can all use this call IC. Before we load through the | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1660   GenerateMissBranch(); | 1660   GenerateMissBranch(); | 
| 1661 | 1661 | 
| 1662   // Return the generated code. | 1662   // Return the generated code. | 
| 1663   return GetCode(Code::FIELD, name); | 1663   return GetCode(Code::FIELD, name); | 
| 1664 } | 1664 } | 
| 1665 | 1665 | 
| 1666 | 1666 | 
| 1667 Handle<Code> CallStubCompiler::CompileArrayPushCall( | 1667 Handle<Code> CallStubCompiler::CompileArrayPushCall( | 
| 1668     Handle<Object> object, | 1668     Handle<Object> object, | 
| 1669     Handle<JSObject> holder, | 1669     Handle<JSObject> holder, | 
| 1670     Handle<JSGlobalPropertyCell> cell, | 1670     Handle<Cell> cell, | 
| 1671     Handle<JSFunction> function, | 1671     Handle<JSFunction> function, | 
| 1672     Handle<String> name) { | 1672     Handle<String> name) { | 
| 1673   // ----------- S t a t e ------------- | 1673   // ----------- S t a t e ------------- | 
| 1674   //  -- ecx                 : name | 1674   //  -- ecx                 : name | 
| 1675   //  -- esp[0]              : return address | 1675   //  -- esp[0]              : return address | 
| 1676   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 1676   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 1677   //  -- ... | 1677   //  -- ... | 
| 1678   //  -- esp[(argc + 1) * 4] : receiver | 1678   //  -- esp[(argc + 1) * 4] : receiver | 
| 1679   // ----------------------------------- | 1679   // ----------------------------------- | 
| 1680 | 1680 | 
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1918   GenerateMissBranch(); | 1918   GenerateMissBranch(); | 
| 1919 | 1919 | 
| 1920   // Return the generated code. | 1920   // Return the generated code. | 
| 1921   return GetCode(function); | 1921   return GetCode(function); | 
| 1922 } | 1922 } | 
| 1923 | 1923 | 
| 1924 | 1924 | 
| 1925 Handle<Code> CallStubCompiler::CompileArrayPopCall( | 1925 Handle<Code> CallStubCompiler::CompileArrayPopCall( | 
| 1926     Handle<Object> object, | 1926     Handle<Object> object, | 
| 1927     Handle<JSObject> holder, | 1927     Handle<JSObject> holder, | 
| 1928     Handle<JSGlobalPropertyCell> cell, | 1928     Handle<Cell> cell, | 
| 1929     Handle<JSFunction> function, | 1929     Handle<JSFunction> function, | 
| 1930     Handle<String> name) { | 1930     Handle<String> name) { | 
| 1931   // ----------- S t a t e ------------- | 1931   // ----------- S t a t e ------------- | 
| 1932   //  -- ecx                 : name | 1932   //  -- ecx                 : name | 
| 1933   //  -- esp[0]              : return address | 1933   //  -- esp[0]              : return address | 
| 1934   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 1934   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 1935   //  -- ... | 1935   //  -- ... | 
| 1936   //  -- esp[(argc + 1) * 4] : receiver | 1936   //  -- esp[(argc + 1) * 4] : receiver | 
| 1937   // ----------------------------------- | 1937   // ----------------------------------- | 
| 1938 | 1938 | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2000   GenerateMissBranch(); | 2000   GenerateMissBranch(); | 
| 2001 | 2001 | 
| 2002   // Return the generated code. | 2002   // Return the generated code. | 
| 2003   return GetCode(function); | 2003   return GetCode(function); | 
| 2004 } | 2004 } | 
| 2005 | 2005 | 
| 2006 | 2006 | 
| 2007 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( | 2007 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall( | 
| 2008     Handle<Object> object, | 2008     Handle<Object> object, | 
| 2009     Handle<JSObject> holder, | 2009     Handle<JSObject> holder, | 
| 2010     Handle<JSGlobalPropertyCell> cell, | 2010     Handle<Cell> cell, | 
| 2011     Handle<JSFunction> function, | 2011     Handle<JSFunction> function, | 
| 2012     Handle<String> name) { | 2012     Handle<String> name) { | 
| 2013   // ----------- S t a t e ------------- | 2013   // ----------- S t a t e ------------- | 
| 2014   //  -- ecx                 : function name | 2014   //  -- ecx                 : function name | 
| 2015   //  -- esp[0]              : return address | 2015   //  -- esp[0]              : return address | 
| 2016   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2016   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 2017   //  -- ... | 2017   //  -- ... | 
| 2018   //  -- esp[(argc + 1) * 4] : receiver | 2018   //  -- esp[(argc + 1) * 4] : receiver | 
| 2019   // ----------------------------------- | 2019   // ----------------------------------- | 
| 2020 | 2020 | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2084   GenerateMissBranch(); | 2084   GenerateMissBranch(); | 
| 2085 | 2085 | 
| 2086   // Return the generated code. | 2086   // Return the generated code. | 
| 2087   return GetCode(function); | 2087   return GetCode(function); | 
| 2088 } | 2088 } | 
| 2089 | 2089 | 
| 2090 | 2090 | 
| 2091 Handle<Code> CallStubCompiler::CompileStringCharAtCall( | 2091 Handle<Code> CallStubCompiler::CompileStringCharAtCall( | 
| 2092     Handle<Object> object, | 2092     Handle<Object> object, | 
| 2093     Handle<JSObject> holder, | 2093     Handle<JSObject> holder, | 
| 2094     Handle<JSGlobalPropertyCell> cell, | 2094     Handle<Cell> cell, | 
| 2095     Handle<JSFunction> function, | 2095     Handle<JSFunction> function, | 
| 2096     Handle<String> name) { | 2096     Handle<String> name) { | 
| 2097   // ----------- S t a t e ------------- | 2097   // ----------- S t a t e ------------- | 
| 2098   //  -- ecx                 : function name | 2098   //  -- ecx                 : function name | 
| 2099   //  -- esp[0]              : return address | 2099   //  -- esp[0]              : return address | 
| 2100   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2100   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 2101   //  -- ... | 2101   //  -- ... | 
| 2102   //  -- esp[(argc + 1) * 4] : receiver | 2102   //  -- esp[(argc + 1) * 4] : receiver | 
| 2103   // ----------------------------------- | 2103   // ----------------------------------- | 
| 2104 | 2104 | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2170   GenerateMissBranch(); | 2170   GenerateMissBranch(); | 
| 2171 | 2171 | 
| 2172   // Return the generated code. | 2172   // Return the generated code. | 
| 2173   return GetCode(function); | 2173   return GetCode(function); | 
| 2174 } | 2174 } | 
| 2175 | 2175 | 
| 2176 | 2176 | 
| 2177 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( | 2177 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( | 
| 2178     Handle<Object> object, | 2178     Handle<Object> object, | 
| 2179     Handle<JSObject> holder, | 2179     Handle<JSObject> holder, | 
| 2180     Handle<JSGlobalPropertyCell> cell, | 2180     Handle<Cell> cell, | 
| 2181     Handle<JSFunction> function, | 2181     Handle<JSFunction> function, | 
| 2182     Handle<String> name) { | 2182     Handle<String> name) { | 
| 2183   // ----------- S t a t e ------------- | 2183   // ----------- S t a t e ------------- | 
| 2184   //  -- ecx                 : function name | 2184   //  -- ecx                 : function name | 
| 2185   //  -- esp[0]              : return address | 2185   //  -- esp[0]              : return address | 
| 2186   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2186   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 2187   //  -- ... | 2187   //  -- ... | 
| 2188   //  -- esp[(argc + 1) * 4] : receiver | 2188   //  -- esp[(argc + 1) * 4] : receiver | 
| 2189   // ----------------------------------- | 2189   // ----------------------------------- | 
| 2190 | 2190 | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2246   GenerateMissBranch(); | 2246   GenerateMissBranch(); | 
| 2247 | 2247 | 
| 2248   // Return the generated code. | 2248   // Return the generated code. | 
| 2249   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2249   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 
| 2250 } | 2250 } | 
| 2251 | 2251 | 
| 2252 | 2252 | 
| 2253 Handle<Code> CallStubCompiler::CompileMathFloorCall( | 2253 Handle<Code> CallStubCompiler::CompileMathFloorCall( | 
| 2254     Handle<Object> object, | 2254     Handle<Object> object, | 
| 2255     Handle<JSObject> holder, | 2255     Handle<JSObject> holder, | 
| 2256     Handle<JSGlobalPropertyCell> cell, | 2256     Handle<Cell> cell, | 
| 2257     Handle<JSFunction> function, | 2257     Handle<JSFunction> function, | 
| 2258     Handle<String> name) { | 2258     Handle<String> name) { | 
| 2259   // ----------- S t a t e ------------- | 2259   // ----------- S t a t e ------------- | 
| 2260   //  -- ecx                 : name | 2260   //  -- ecx                 : name | 
| 2261   //  -- esp[0]              : return address | 2261   //  -- esp[0]              : return address | 
| 2262   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2262   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 2263   //  -- ... | 2263   //  -- ... | 
| 2264   //  -- esp[(argc + 1) * 4] : receiver | 2264   //  -- esp[(argc + 1) * 4] : receiver | 
| 2265   // ----------------------------------- | 2265   // ----------------------------------- | 
| 2266 | 2266 | 
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2377   GenerateMissBranch(); | 2377   GenerateMissBranch(); | 
| 2378 | 2378 | 
| 2379   // Return the generated code. | 2379   // Return the generated code. | 
| 2380   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2380   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 
| 2381 } | 2381 } | 
| 2382 | 2382 | 
| 2383 | 2383 | 
| 2384 Handle<Code> CallStubCompiler::CompileMathAbsCall( | 2384 Handle<Code> CallStubCompiler::CompileMathAbsCall( | 
| 2385     Handle<Object> object, | 2385     Handle<Object> object, | 
| 2386     Handle<JSObject> holder, | 2386     Handle<JSObject> holder, | 
| 2387     Handle<JSGlobalPropertyCell> cell, | 2387     Handle<Cell> cell, | 
| 2388     Handle<JSFunction> function, | 2388     Handle<JSFunction> function, | 
| 2389     Handle<String> name) { | 2389     Handle<String> name) { | 
| 2390   // ----------- S t a t e ------------- | 2390   // ----------- S t a t e ------------- | 
| 2391   //  -- ecx                 : name | 2391   //  -- ecx                 : name | 
| 2392   //  -- esp[0]              : return address | 2392   //  -- esp[0]              : return address | 
| 2393   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 2393   //  -- esp[(argc - n) * 4] : arg[n] (zero-based) | 
| 2394   //  -- ... | 2394   //  -- ... | 
| 2395   //  -- esp[(argc + 1) * 4] : receiver | 2395   //  -- esp[(argc + 1) * 4] : receiver | 
| 2396   // ----------------------------------- | 2396   // ----------------------------------- | 
| 2397 | 2397 | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2484 | 2484 | 
| 2485   // Return the generated code. | 2485   // Return the generated code. | 
| 2486   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 2486   return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); | 
| 2487 } | 2487 } | 
| 2488 | 2488 | 
| 2489 | 2489 | 
| 2490 Handle<Code> CallStubCompiler::CompileFastApiCall( | 2490 Handle<Code> CallStubCompiler::CompileFastApiCall( | 
| 2491     const CallOptimization& optimization, | 2491     const CallOptimization& optimization, | 
| 2492     Handle<Object> object, | 2492     Handle<Object> object, | 
| 2493     Handle<JSObject> holder, | 2493     Handle<JSObject> holder, | 
| 2494     Handle<JSGlobalPropertyCell> cell, | 2494     Handle<Cell> cell, | 
| 2495     Handle<JSFunction> function, | 2495     Handle<JSFunction> function, | 
| 2496     Handle<String> name) { | 2496     Handle<String> name) { | 
| 2497   ASSERT(optimization.is_simple_api_call()); | 2497   ASSERT(optimization.is_simple_api_call()); | 
| 2498   // Bail out if object is a global object as we don't want to | 2498   // Bail out if object is a global object as we don't want to | 
| 2499   // repatch it to global receiver. | 2499   // repatch it to global receiver. | 
| 2500   if (object->IsGlobalObject()) return Handle<Code>::null(); | 2500   if (object->IsGlobalObject()) return Handle<Code>::null(); | 
| 2501   if (!cell.is_null()) return Handle<Code>::null(); | 2501   if (!cell.is_null()) return Handle<Code>::null(); | 
| 2502   if (!object->IsJSObject()) return Handle<Code>::null(); | 2502   if (!object->IsJSObject()) return Handle<Code>::null(); | 
| 2503   int depth = optimization.GetPrototypeDepthOfExpectedType( | 2503   int depth = optimization.GetPrototypeDepthOfExpectedType( | 
| 2504       Handle<JSObject>::cast(object), holder); | 2504       Handle<JSObject>::cast(object), holder); | 
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2666 | 2666 | 
| 2667 Handle<Code> CallStubCompiler::CompileCallConstant( | 2667 Handle<Code> CallStubCompiler::CompileCallConstant( | 
| 2668     Handle<Object> object, | 2668     Handle<Object> object, | 
| 2669     Handle<JSObject> holder, | 2669     Handle<JSObject> holder, | 
| 2670     Handle<Name> name, | 2670     Handle<Name> name, | 
| 2671     CheckType check, | 2671     CheckType check, | 
| 2672     Handle<JSFunction> function) { | 2672     Handle<JSFunction> function) { | 
| 2673 | 2673 | 
| 2674   if (HasCustomCallGenerator(function)) { | 2674   if (HasCustomCallGenerator(function)) { | 
| 2675     Handle<Code> code = CompileCustomCall(object, holder, | 2675     Handle<Code> code = CompileCustomCall(object, holder, | 
| 2676                                           Handle<JSGlobalPropertyCell>::null(), | 2676                                           Handle<Cell>::null(), | 
| 2677                                           function, Handle<String>::cast(name)); | 2677                                           function, Handle<String>::cast(name)); | 
| 2678     // A null handle means bail out to the regular compiler code below. | 2678     // A null handle means bail out to the regular compiler code below. | 
| 2679     if (!code.is_null()) return code; | 2679     if (!code.is_null()) return code; | 
| 2680   } | 2680   } | 
| 2681 | 2681 | 
| 2682   Label success; | 2682   Label success; | 
| 2683 | 2683 | 
| 2684   CompileHandlerFrontend(object, holder, name, check, &success); | 2684   CompileHandlerFrontend(object, holder, name, check, &success); | 
| 2685   __ bind(&success); | 2685   __ bind(&success); | 
| 2686   CompileHandlerBackend(function); | 2686   CompileHandlerBackend(function); | 
| (...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3743     TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); | 3743     TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow); | 
| 3744   } | 3744   } | 
| 3745 } | 3745 } | 
| 3746 | 3746 | 
| 3747 | 3747 | 
| 3748 #undef __ | 3748 #undef __ | 
| 3749 | 3749 | 
| 3750 } }  // namespace v8::internal | 3750 } }  // namespace v8::internal | 
| 3751 | 3751 | 
| 3752 #endif  // V8_TARGET_ARCH_IA32 | 3752 #endif  // V8_TARGET_ARCH_IA32 | 
| OLD | NEW | 
|---|