Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: src/ia32/stub-cache-ia32.cc

Issue 16631002: Separate Cell and PropertyCell spaces (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove Mips changes Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ia32/macro-assembler-ia32.cc ('k') | src/incremental-marking.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/ia32/macro-assembler-ia32.cc ('k') | src/incremental-marking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698