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

Side by Side Diff: src/ia32/stub-cache-ia32.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 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 } else { 391 } else {
392 __ mov(Operand(esp, 2 * kPointerSize), 392 __ mov(Operand(esp, 2 * kPointerSize),
393 Immediate(Handle<Object>(call_data))); 393 Immediate(Handle<Object>(call_data)));
394 } 394 }
395 395
396 // Set the number of arguments. 396 // Set the number of arguments.
397 __ mov(eax, Immediate(argc + 4)); 397 __ mov(eax, Immediate(argc + 4));
398 398
399 // Jump to the fast api call builtin (tail call). 399 // Jump to the fast api call builtin (tail call).
400 Handle<Code> code = Handle<Code>( 400 Handle<Code> code = Handle<Code>(
401 Builtins::builtin(Builtins::FastHandleApiCall)); 401 Isolate::Current()->builtins()->builtin(Builtins::FastHandleApiCall));
402 ParameterCount expected(0); 402 ParameterCount expected(0);
403 __ InvokeCode(code, expected, expected, 403 __ InvokeCode(code, expected, expected,
404 RelocInfo::CODE_TARGET, JUMP_FUNCTION); 404 RelocInfo::CODE_TARGET, JUMP_FUNCTION);
405 } 405 }
406 406
407 407
408 class CallInterceptorCompiler BASE_EMBEDDED { 408 class CallInterceptorCompiler BASE_EMBEDDED {
409 public: 409 public:
410 CallInterceptorCompiler(StubCompiler* stub_compiler, 410 CallInterceptorCompiler(StubCompiler* stub_compiler,
411 const ParameterCount& arguments, 411 const ParameterCount& arguments,
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 StubCompiler* stub_compiler_; 606 StubCompiler* stub_compiler_;
607 const ParameterCount& arguments_; 607 const ParameterCount& arguments_;
608 Register name_; 608 Register name_;
609 }; 609 };
610 610
611 611
612 void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) { 612 void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) {
613 ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC); 613 ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC);
614 Code* code = NULL; 614 Code* code = NULL;
615 if (kind == Code::LOAD_IC) { 615 if (kind == Code::LOAD_IC) {
616 code = Builtins::builtin(Builtins::LoadIC_Miss); 616 code = Isolate::Current()->builtins()->builtin(Builtins::LoadIC_Miss);
617 } else { 617 } else {
618 code = Builtins::builtin(Builtins::KeyedLoadIC_Miss); 618 code = Isolate::Current()->builtins()->builtin(Builtins::KeyedLoadIC_Miss);
619 } 619 }
620 620
621 Handle<Code> ic(code); 621 Handle<Code> ic(code);
622 __ jmp(ic, RelocInfo::CODE_TARGET); 622 __ jmp(ic, RelocInfo::CODE_TARGET);
623 } 623 }
624 624
625 625
626 // Both name_reg and receiver_reg are preserved on jumps to miss_label, 626 // Both name_reg and receiver_reg are preserved on jumps to miss_label,
627 // but may be destroyed if store is successful. 627 // but may be destroyed if store is successful.
628 void StubCompiler::GenerateStoreField(MacroAssembler* masm, 628 void StubCompiler::GenerateStoreField(MacroAssembler* masm,
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 GenerateStoreField(masm(), 1788 GenerateStoreField(masm(),
1789 object, 1789 object,
1790 index, 1790 index,
1791 transition, 1791 transition,
1792 edx, ecx, ebx, 1792 edx, ecx, ebx,
1793 &miss); 1793 &miss);
1794 1794
1795 // Handle store cache miss. 1795 // Handle store cache miss.
1796 __ bind(&miss); 1796 __ bind(&miss);
1797 __ mov(ecx, Immediate(Handle<String>(name))); // restore name 1797 __ mov(ecx, Immediate(Handle<String>(name))); // restore name
1798 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1798 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1799 Builtins::StoreIC_Miss));
1799 __ jmp(ic, RelocInfo::CODE_TARGET); 1800 __ jmp(ic, RelocInfo::CODE_TARGET);
1800 1801
1801 // Return the generated code. 1802 // Return the generated code.
1802 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 1803 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
1803 } 1804 }
1804 1805
1805 1806
1806 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object, 1807 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object,
1807 AccessorInfo* callback, 1808 AccessorInfo* callback,
1808 String* name) { 1809 String* name) {
(...skipping 30 matching lines...) Expand all
1839 __ push(eax); // value 1840 __ push(eax); // value
1840 __ push(ebx); // restore return address 1841 __ push(ebx); // restore return address
1841 1842
1842 // Do tail-call to the runtime system. 1843 // Do tail-call to the runtime system.
1843 ExternalReference store_callback_property = 1844 ExternalReference store_callback_property =
1844 ExternalReference(IC_Utility(IC::kStoreCallbackProperty)); 1845 ExternalReference(IC_Utility(IC::kStoreCallbackProperty));
1845 __ TailCallExternalReference(store_callback_property, 4, 1); 1846 __ TailCallExternalReference(store_callback_property, 4, 1);
1846 1847
1847 // Handle store cache miss. 1848 // Handle store cache miss.
1848 __ bind(&miss); 1849 __ bind(&miss);
1849 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1850 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1851 Builtins::StoreIC_Miss));
1850 __ jmp(ic, RelocInfo::CODE_TARGET); 1852 __ jmp(ic, RelocInfo::CODE_TARGET);
1851 1853
1852 // Return the generated code. 1854 // Return the generated code.
1853 return GetCode(CALLBACKS, name); 1855 return GetCode(CALLBACKS, name);
1854 } 1856 }
1855 1857
1856 1858
1857 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 1859 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
1858 String* name) { 1860 String* name) {
1859 // ----------- S t a t e ------------- 1861 // ----------- S t a t e -------------
(...skipping 28 matching lines...) Expand all
1888 __ push(eax); // value 1890 __ push(eax); // value
1889 __ push(ebx); // restore return address 1891 __ push(ebx); // restore return address
1890 1892
1891 // Do tail-call to the runtime system. 1893 // Do tail-call to the runtime system.
1892 ExternalReference store_ic_property = 1894 ExternalReference store_ic_property =
1893 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty)); 1895 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty));
1894 __ TailCallExternalReference(store_ic_property, 3, 1); 1896 __ TailCallExternalReference(store_ic_property, 3, 1);
1895 1897
1896 // Handle store cache miss. 1898 // Handle store cache miss.
1897 __ bind(&miss); 1899 __ bind(&miss);
1898 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1900 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1901 Builtins::StoreIC_Miss));
1899 __ jmp(ic, RelocInfo::CODE_TARGET); 1902 __ jmp(ic, RelocInfo::CODE_TARGET);
1900 1903
1901 // Return the generated code. 1904 // Return the generated code.
1902 return GetCode(INTERCEPTOR, name); 1905 return GetCode(INTERCEPTOR, name);
1903 } 1906 }
1904 1907
1905 1908
1906 Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, 1909 Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
1907 JSGlobalPropertyCell* cell, 1910 JSGlobalPropertyCell* cell,
1908 String* name) { 1911 String* name) {
(...skipping 14 matching lines...) Expand all
1923 __ mov(ecx, Immediate(Handle<JSGlobalPropertyCell>(cell))); 1926 __ mov(ecx, Immediate(Handle<JSGlobalPropertyCell>(cell)));
1924 __ mov(FieldOperand(ecx, JSGlobalPropertyCell::kValueOffset), eax); 1927 __ mov(FieldOperand(ecx, JSGlobalPropertyCell::kValueOffset), eax);
1925 1928
1926 // Return the value (register eax). 1929 // Return the value (register eax).
1927 __ IncrementCounter(&Counters::named_store_global_inline, 1); 1930 __ IncrementCounter(&Counters::named_store_global_inline, 1);
1928 __ ret(0); 1931 __ ret(0);
1929 1932
1930 // Handle store cache miss. 1933 // Handle store cache miss.
1931 __ bind(&miss); 1934 __ bind(&miss);
1932 __ IncrementCounter(&Counters::named_store_global_inline_miss, 1); 1935 __ IncrementCounter(&Counters::named_store_global_inline_miss, 1);
1933 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 1936 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1937 Builtins::StoreIC_Miss));
1934 __ jmp(ic, RelocInfo::CODE_TARGET); 1938 __ jmp(ic, RelocInfo::CODE_TARGET);
1935 1939
1936 // Return the generated code. 1940 // Return the generated code.
1937 return GetCode(NORMAL, name); 1941 return GetCode(NORMAL, name);
1938 } 1942 }
1939 1943
1940 1944
1941 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 1945 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
1942 int index, 1946 int index,
1943 Map* transition, 1947 Map* transition,
(...skipping 16 matching lines...) Expand all
1960 GenerateStoreField(masm(), 1964 GenerateStoreField(masm(),
1961 object, 1965 object,
1962 index, 1966 index,
1963 transition, 1967 transition,
1964 edx, ecx, ebx, 1968 edx, ecx, ebx,
1965 &miss); 1969 &miss);
1966 1970
1967 // Handle store cache miss. 1971 // Handle store cache miss.
1968 __ bind(&miss); 1972 __ bind(&miss);
1969 __ DecrementCounter(&Counters::keyed_store_field, 1); 1973 __ DecrementCounter(&Counters::keyed_store_field, 1);
1970 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); 1974 Handle<Code> ic(Isolate::Current()->builtins()->builtin(
1975 Builtins::KeyedStoreIC_Miss));
1971 __ jmp(ic, RelocInfo::CODE_TARGET); 1976 __ jmp(ic, RelocInfo::CODE_TARGET);
1972 1977
1973 // Return the generated code. 1978 // Return the generated code.
1974 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 1979 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
1975 } 1980 }
1976 1981
1977 1982
1978 Object* LoadStubCompiler::CompileLoadNonexistent(String* name, 1983 Object* LoadStubCompiler::CompileLoadNonexistent(String* name,
1979 JSObject* object, 1984 JSObject* object,
1980 JSObject* last) { 1985 JSObject* last) {
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
2482 __ pop(ecx); 2487 __ pop(ecx);
2483 __ lea(esp, Operand(esp, ebx, times_pointer_size, 1 * kPointerSize)); 2488 __ lea(esp, Operand(esp, ebx, times_pointer_size, 1 * kPointerSize));
2484 __ push(ecx); 2489 __ push(ecx);
2485 __ IncrementCounter(&Counters::constructed_objects, 1); 2490 __ IncrementCounter(&Counters::constructed_objects, 1);
2486 __ IncrementCounter(&Counters::constructed_objects_stub, 1); 2491 __ IncrementCounter(&Counters::constructed_objects_stub, 1);
2487 __ ret(0); 2492 __ ret(0);
2488 2493
2489 // Jump to the generic stub in case the specialized code cannot handle the 2494 // Jump to the generic stub in case the specialized code cannot handle the
2490 // construction. 2495 // construction.
2491 __ bind(&generic_stub_call); 2496 __ bind(&generic_stub_call);
2492 Code* code = Builtins::builtin(Builtins::JSConstructStubGeneric); 2497 Code* code = Isolate::Current()->builtins()->builtin(
2498 Builtins::JSConstructStubGeneric);
2493 Handle<Code> generic_construct_stub(code); 2499 Handle<Code> generic_construct_stub(code);
2494 __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET); 2500 __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
2495 2501
2496 // Return the generated code. 2502 // Return the generated code.
2497 return GetCode(); 2503 return GetCode();
2498 } 2504 }
2499 2505
2500 2506
2501 #undef __ 2507 #undef __
2502 2508
2503 } } // namespace v8::internal 2509 } } // namespace v8::internal
2504 2510
2505 #endif // V8_TARGET_ARCH_IA32 2511 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/macro-assembler-ia32.cc ('k') | src/ia32/virtual-frame-ia32.h » ('j') | src/runtime.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698