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

Side by Side Diff: src/ia32/ic-ia32.cc

Issue 115744: This patch much improves our tracking of whether function is... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 7 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-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // ----------------------------------- 419 // -----------------------------------
420 Label number, non_number, non_string, boolean, probe, miss; 420 Label number, non_number, non_string, boolean, probe, miss;
421 421
422 // Get the receiver of the function from the stack; 1 ~ return address. 422 // Get the receiver of the function from the stack; 1 ~ return address.
423 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); 423 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
424 // Get the name of the function from the stack; 2 ~ return address, receiver 424 // Get the name of the function from the stack; 2 ~ return address, receiver
425 __ mov(ecx, Operand(esp, (argc + 2) * kPointerSize)); 425 __ mov(ecx, Operand(esp, (argc + 2) * kPointerSize));
426 426
427 // Probe the stub cache. 427 // Probe the stub cache.
428 Code::Flags flags = 428 Code::Flags flags =
429 Code::ComputeFlags(Code::CALL_IC, MONOMORPHIC, NORMAL, argc); 429 Code::ComputeFlags(Code::CALL_IC, NOT_IN_LOOP, MONOMORPHIC, NORMAL, argc);
430 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx); 430 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx);
431 431
432 // If the stub cache probing failed, the receiver might be a value. 432 // If the stub cache probing failed, the receiver might be a value.
433 // For value objects, we use the map of the prototype objects for 433 // For value objects, we use the map of the prototype objects for
434 // the corresponding JSValue for the cache and that is what we need 434 // the corresponding JSValue for the cache and that is what we need
435 // to probe. 435 // to probe.
436 // 436 //
437 // Check for number. 437 // Check for number.
438 __ test(edx, Immediate(kSmiTagMask)); 438 __ test(edx, Immediate(kSmiTagMask));
439 __ j(zero, &number, not_taken); 439 __ j(zero, &number, not_taken);
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) { 628 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
629 // ----------- S t a t e ------------- 629 // ----------- S t a t e -------------
630 // -- ecx : name 630 // -- ecx : name
631 // -- esp[0] : return address 631 // -- esp[0] : return address
632 // -- esp[4] : receiver 632 // -- esp[4] : receiver
633 // ----------------------------------- 633 // -----------------------------------
634 634
635 __ mov(eax, Operand(esp, kPointerSize)); 635 __ mov(eax, Operand(esp, kPointerSize));
636 636
637 // Probe the stub cache. 637 // Probe the stub cache.
638 Code::Flags flags = Code::ComputeFlags(Code::LOAD_IC, MONOMORPHIC); 638 Code::Flags flags = Code::ComputeFlags(Code::LOAD_IC,
639 NOT_IN_LOOP,
640 MONOMORPHIC);
639 StubCache::GenerateProbe(masm, flags, eax, ecx, ebx); 641 StubCache::GenerateProbe(masm, flags, eax, ecx, ebx);
640 642
641 // Cache miss: Jump to runtime. 643 // Cache miss: Jump to runtime.
642 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); 644 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
643 } 645 }
644 646
645 647
646 void LoadIC::GenerateNormal(MacroAssembler* masm) { 648 void LoadIC::GenerateNormal(MacroAssembler* masm) {
647 // ----------- S t a t e ------------- 649 // ----------- S t a t e -------------
648 // -- ecx : name 650 // -- ecx : name
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { 833 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
832 // ----------- S t a t e ------------- 834 // ----------- S t a t e -------------
833 // -- eax : value 835 // -- eax : value
834 // -- ecx : name 836 // -- ecx : name
835 // -- esp[0] : return address 837 // -- esp[0] : return address
836 // -- esp[4] : receiver 838 // -- esp[4] : receiver
837 // ----------------------------------- 839 // -----------------------------------
838 840
839 // Get the receiver from the stack and probe the stub cache. 841 // Get the receiver from the stack and probe the stub cache.
840 __ mov(edx, Operand(esp, 4)); 842 __ mov(edx, Operand(esp, 4));
841 Code::Flags flags = Code::ComputeFlags(Code::STORE_IC, MONOMORPHIC); 843 Code::Flags flags = Code::ComputeFlags(Code::STORE_IC,
844 NOT_IN_LOOP,
845 MONOMORPHIC);
842 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx); 846 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx);
843 847
844 // Cache miss: Jump to runtime. 848 // Cache miss: Jump to runtime.
845 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); 849 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
846 } 850 }
847 851
848 852
849 void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { 853 void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
850 // ----------- S t a t e ------------- 854 // ----------- S t a t e -------------
851 // -- eax : value 855 // -- eax : value
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 931
928 // Do tail-call to runtime routine. 932 // Do tail-call to runtime routine.
929 __ TailCallRuntime( 933 __ TailCallRuntime(
930 ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3); 934 ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3);
931 } 935 }
932 936
933 #undef __ 937 #undef __
934 938
935 939
936 } } // namespace v8::internal 940 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698