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

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

Issue 2840018: [Isolates] Moved more compilation-related globals (builtins, runtime, &c.)... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: rebase Created 10 years, 5 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
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 __ jmp(kScratchRegister); 78 __ jmp(kScratchRegister);
79 79
80 __ bind(&miss); 80 __ bind(&miss);
81 } 81 }
82 82
83 83
84 void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) { 84 void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) {
85 ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC); 85 ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC);
86 Code* code = NULL; 86 Code* code = NULL;
87 if (kind == Code::LOAD_IC) { 87 if (kind == Code::LOAD_IC) {
88 code = Builtins::builtin(Builtins::LoadIC_Miss); 88 code = Isolate::Current()->builtins()->builtin(Builtins::LoadIC_Miss);
89 } else { 89 } else {
90 code = Builtins::builtin(Builtins::KeyedLoadIC_Miss); 90 code = Isolate::Current()->builtins()->builtin(Builtins::KeyedLoadIC_Miss);
91 } 91 }
92 92
93 Handle<Code> ic(code); 93 Handle<Code> ic(code);
94 __ Jump(ic, RelocInfo::CODE_TARGET); 94 __ Jump(ic, RelocInfo::CODE_TARGET);
95 } 95 }
96 96
97 97
98 void StubCompiler::GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm, 98 void StubCompiler::GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm,
99 int index, 99 int index,
100 Register prototype) { 100 Register prototype) {
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 __ movq(Operand(rsp, 2 * kPointerSize), rbx); 467 __ movq(Operand(rsp, 2 * kPointerSize), rbx);
468 } else { 468 } else {
469 __ Move(Operand(rsp, 2 * kPointerSize), Handle<Object>(call_data)); 469 __ Move(Operand(rsp, 2 * kPointerSize), Handle<Object>(call_data));
470 } 470 }
471 471
472 // Set the number of arguments. 472 // Set the number of arguments.
473 __ movq(rax, Immediate(argc + 4)); 473 __ movq(rax, Immediate(argc + 4));
474 474
475 // Jump to the fast api call builtin (tail call). 475 // Jump to the fast api call builtin (tail call).
476 Handle<Code> code = Handle<Code>( 476 Handle<Code> code = Handle<Code>(
477 Builtins::builtin(Builtins::FastHandleApiCall)); 477 Isolate::Current()->builtins()->builtin(Builtins::FastHandleApiCall));
478 ParameterCount expected(0); 478 ParameterCount expected(0);
479 __ InvokeCode(code, expected, expected, 479 __ InvokeCode(code, expected, expected,
480 RelocInfo::CODE_TARGET, JUMP_FUNCTION); 480 RelocInfo::CODE_TARGET, JUMP_FUNCTION);
481 } 481 }
482 482
483 483
484 class CallInterceptorCompiler BASE_EMBEDDED { 484 class CallInterceptorCompiler BASE_EMBEDDED {
485 public: 485 public:
486 CallInterceptorCompiler(StubCompiler* stub_compiler, 486 CallInterceptorCompiler(StubCompiler* stub_compiler,
487 const ParameterCount& arguments, 487 const ParameterCount& arguments,
(...skipping 1244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1732 __ push(rax); // value 1732 __ push(rax); // value
1733 __ push(rbx); // restore return address 1733 __ push(rbx); // restore return address
1734 1734
1735 // Do tail-call to the runtime system. 1735 // Do tail-call to the runtime system.
1736 ExternalReference store_callback_property = 1736 ExternalReference store_callback_property =
1737 ExternalReference(IC_Utility(IC::kStoreCallbackProperty)); 1737 ExternalReference(IC_Utility(IC::kStoreCallbackProperty));
1738 __ TailCallExternalReference(store_callback_property, 4, 1); 1738 __ TailCallExternalReference(store_callback_property, 4, 1);
1739 1739
1740 // Handle store cache miss. 1740 // Handle store cache miss.
1741 __ bind(&miss); 1741 __ bind(&miss);
1742 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1742 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1743 Builtins::StoreIC_Miss));
1743 __ Jump(ic, RelocInfo::CODE_TARGET); 1744 __ Jump(ic, RelocInfo::CODE_TARGET);
1744 1745
1745 // Return the generated code. 1746 // Return the generated code.
1746 return GetCode(CALLBACKS, name); 1747 return GetCode(CALLBACKS, name);
1747 } 1748 }
1748 1749
1749 1750
1750 Object* StoreStubCompiler::CompileStoreField(JSObject* object, 1751 Object* StoreStubCompiler::CompileStoreField(JSObject* object,
1751 int index, 1752 int index,
1752 Map* transition, 1753 Map* transition,
1753 String* name) { 1754 String* name) {
1754 // ----------- S t a t e ------------- 1755 // ----------- S t a t e -------------
1755 // -- rax : value 1756 // -- rax : value
1756 // -- rcx : name 1757 // -- rcx : name
1757 // -- rdx : receiver 1758 // -- rdx : receiver
1758 // -- rsp[0] : return address 1759 // -- rsp[0] : return address
1759 // ----------------------------------- 1760 // -----------------------------------
1760 Label miss; 1761 Label miss;
1761 1762
1762 // Generate store field code. Preserves receiver and name on jump to miss. 1763 // Generate store field code. Preserves receiver and name on jump to miss.
1763 GenerateStoreField(masm(), 1764 GenerateStoreField(masm(),
1764 object, 1765 object,
1765 index, 1766 index,
1766 transition, 1767 transition,
1767 rdx, rcx, rbx, 1768 rdx, rcx, rbx,
1768 &miss); 1769 &miss);
1769 1770
1770 // Handle store cache miss. 1771 // Handle store cache miss.
1771 __ bind(&miss); 1772 __ bind(&miss);
1772 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1773 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1774 Builtins::StoreIC_Miss));
1773 __ Jump(ic, RelocInfo::CODE_TARGET); 1775 __ Jump(ic, RelocInfo::CODE_TARGET);
1774 1776
1775 // Return the generated code. 1777 // Return the generated code.
1776 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 1778 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
1777 } 1779 }
1778 1780
1779 1781
1780 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 1782 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
1781 String* name) { 1783 String* name) {
1782 // ----------- S t a t e ------------- 1784 // ----------- S t a t e -------------
(...skipping 27 matching lines...) Expand all
1810 __ push(rax); // value 1812 __ push(rax); // value
1811 __ push(rbx); // restore return address 1813 __ push(rbx); // restore return address
1812 1814
1813 // Do tail-call to the runtime system. 1815 // Do tail-call to the runtime system.
1814 ExternalReference store_ic_property = 1816 ExternalReference store_ic_property =
1815 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty)); 1817 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty));
1816 __ TailCallExternalReference(store_ic_property, 3, 1); 1818 __ TailCallExternalReference(store_ic_property, 3, 1);
1817 1819
1818 // Handle store cache miss. 1820 // Handle store cache miss.
1819 __ bind(&miss); 1821 __ bind(&miss);
1820 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1822 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1823 Builtins::StoreIC_Miss));
1821 __ Jump(ic, RelocInfo::CODE_TARGET); 1824 __ Jump(ic, RelocInfo::CODE_TARGET);
1822 1825
1823 // Return the generated code. 1826 // Return the generated code.
1824 return GetCode(INTERCEPTOR, name); 1827 return GetCode(INTERCEPTOR, name);
1825 } 1828 }
1826 1829
1827 1830
1828 Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, 1831 Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
1829 JSGlobalPropertyCell* cell, 1832 JSGlobalPropertyCell* cell,
1830 String* name) { 1833 String* name) {
(...skipping 14 matching lines...) Expand all
1845 __ Move(rcx, Handle<JSGlobalPropertyCell>(cell)); 1848 __ Move(rcx, Handle<JSGlobalPropertyCell>(cell));
1846 __ movq(FieldOperand(rcx, JSGlobalPropertyCell::kValueOffset), rax); 1849 __ movq(FieldOperand(rcx, JSGlobalPropertyCell::kValueOffset), rax);
1847 1850
1848 // Return the value (register rax). 1851 // Return the value (register rax).
1849 __ IncrementCounter(&Counters::named_store_global_inline, 1); 1852 __ IncrementCounter(&Counters::named_store_global_inline, 1);
1850 __ ret(0); 1853 __ ret(0);
1851 1854
1852 // Handle store cache miss. 1855 // Handle store cache miss.
1853 __ bind(&miss); 1856 __ bind(&miss);
1854 __ IncrementCounter(&Counters::named_store_global_inline_miss, 1); 1857 __ IncrementCounter(&Counters::named_store_global_inline_miss, 1);
1855 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1858 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1859 Builtins::StoreIC_Miss));
1856 __ Jump(ic, RelocInfo::CODE_TARGET); 1860 __ Jump(ic, RelocInfo::CODE_TARGET);
1857 1861
1858 // Return the generated code. 1862 // Return the generated code.
1859 return GetCode(NORMAL, name); 1863 return GetCode(NORMAL, name);
1860 } 1864 }
1861 1865
1862 1866
1863 Object* KeyedLoadStubCompiler::CompileLoadField(String* name, 1867 Object* KeyedLoadStubCompiler::CompileLoadField(String* name,
1864 JSObject* receiver, 1868 JSObject* receiver,
1865 JSObject* holder, 1869 JSObject* holder,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 GenerateStoreField(masm(), 1914 GenerateStoreField(masm(),
1911 object, 1915 object,
1912 index, 1916 index,
1913 transition, 1917 transition,
1914 rdx, rcx, rbx, 1918 rdx, rcx, rbx,
1915 &miss); 1919 &miss);
1916 1920
1917 // Handle store cache miss. 1921 // Handle store cache miss.
1918 __ bind(&miss); 1922 __ bind(&miss);
1919 __ DecrementCounter(&Counters::keyed_store_field, 1); 1923 __ DecrementCounter(&Counters::keyed_store_field, 1);
1920 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); 1924 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1925 Builtins::KeyedStoreIC_Miss));
1921 __ Jump(ic, RelocInfo::CODE_TARGET); 1926 __ Jump(ic, RelocInfo::CODE_TARGET);
1922 1927
1923 // Return the generated code. 1928 // Return the generated code.
1924 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 1929 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
1925 } 1930 }
1926 1931
1927 1932
1928 // TODO(1241006): Avoid having lazy compile stubs specialized by the 1933 // TODO(1241006): Avoid having lazy compile stubs specialized by the
1929 // number of arguments. It is not needed anymore. 1934 // number of arguments. It is not needed anymore.
1930 Object* StubCompiler::CompileLazyCompile(Code::Flags flags) { 1935 Object* StubCompiler::CompileLazyCompile(Code::Flags flags) {
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 __ pop(rcx); 2324 __ pop(rcx);
2320 __ lea(rsp, Operand(rsp, rbx, times_pointer_size, 1 * kPointerSize)); 2325 __ lea(rsp, Operand(rsp, rbx, times_pointer_size, 1 * kPointerSize));
2321 __ push(rcx); 2326 __ push(rcx);
2322 __ IncrementCounter(&Counters::constructed_objects, 1); 2327 __ IncrementCounter(&Counters::constructed_objects, 1);
2323 __ IncrementCounter(&Counters::constructed_objects_stub, 1); 2328 __ IncrementCounter(&Counters::constructed_objects_stub, 1);
2324 __ ret(0); 2329 __ ret(0);
2325 2330
2326 // Jump to the generic stub in case the specialized code cannot handle the 2331 // Jump to the generic stub in case the specialized code cannot handle the
2327 // construction. 2332 // construction.
2328 __ bind(&generic_stub_call); 2333 __ bind(&generic_stub_call);
2329 Code* code = Builtins::builtin(Builtins::JSConstructStubGeneric); 2334 Code* code = Isolate::Current()->builtins()->builtin(
2335 Builtins::JSConstructStubGeneric);
2330 Handle<Code> generic_construct_stub(code); 2336 Handle<Code> generic_construct_stub(code);
2331 __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET); 2337 __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
2332 2338
2333 // Return the generated code. 2339 // Return the generated code.
2334 return GetCode(); 2340 return GetCode();
2335 } 2341 }
2336 2342
2337 2343
2338 #undef __ 2344 #undef __
2339 2345
2340 } } // namespace v8::internal 2346 } } // namespace v8::internal
2341 2347
2342 #endif // V8_TARGET_ARCH_X64 2348 #endif // V8_TARGET_ARCH_X64
OLDNEW
« src/runtime.h ('K') | « src/x64/macro-assembler-x64.cc ('k') | src/x64/virtual-frame-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698