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

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

Issue 39014: Add a meaningful name when disassembling code. This makes it easier... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 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
« src/stub-cache.cc ('K') | « src/stub-cache-arm.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 __ CallRuntime(Runtime::kLazyCompile, 1); 458 __ CallRuntime(Runtime::kLazyCompile, 1);
459 __ pop(edi); 459 __ pop(edi);
460 460
461 // Tear down temporary frame. 461 // Tear down temporary frame.
462 __ LeaveInternalFrame(); 462 __ LeaveInternalFrame();
463 463
464 // Do a tail-call of the compiled function. 464 // Do a tail-call of the compiled function.
465 __ lea(ecx, FieldOperand(eax, Code::kHeaderSize)); 465 __ lea(ecx, FieldOperand(eax, Code::kHeaderSize));
466 __ jmp(Operand(ecx)); 466 __ jmp(Operand(ecx));
467 467
468 return GetCodeWithFlags(flags); 468 return GetCodeWithFlags(flags, "LazyCompileStub");
469 } 469 }
470 470
471 471
472 Object* CallStubCompiler::CompileCallField(Object* object, 472 Object* CallStubCompiler::CompileCallField(Object* object,
473 JSObject* holder, 473 JSObject* holder,
474 int index) { 474 int index,
475 String* name) {
475 // ----------- S t a t e ------------- 476 // ----------- S t a t e -------------
476 // ----------------------------------- 477 // -----------------------------------
477 Label miss; 478 Label miss;
478 479
479 // Get the receiver from the stack. 480 // Get the receiver from the stack.
480 const int argc = arguments().immediate(); 481 const int argc = arguments().immediate();
481 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); 482 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
482 483
483 // Check that the receiver isn't a smi. 484 // Check that the receiver isn't a smi.
484 __ test(edx, Immediate(kSmiTagMask)); 485 __ test(edx, Immediate(kSmiTagMask));
(...skipping 22 matching lines...) Expand all
507 508
508 // Invoke the function. 509 // Invoke the function.
509 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION); 510 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION);
510 511
511 // Handle call cache miss. 512 // Handle call cache miss.
512 __ bind(&miss); 513 __ bind(&miss);
513 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 514 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
514 __ jmp(ic, RelocInfo::CODE_TARGET); 515 __ jmp(ic, RelocInfo::CODE_TARGET);
515 516
516 // Return the generated code. 517 // Return the generated code.
517 return GetCode(FIELD); 518 return GetCode(FIELD, name);
518 } 519 }
519 520
520 521
521 Object* CallStubCompiler::CompileCallConstant(Object* object, 522 Object* CallStubCompiler::CompileCallConstant(Object* object,
522 JSObject* holder, 523 JSObject* holder,
523 JSFunction* function, 524 JSFunction* function,
524 CheckType check) { 525 CheckType check) {
525 // ----------- S t a t e ------------- 526 // ----------- S t a t e -------------
526 // ----------------------------------- 527 // -----------------------------------
527 Label miss; 528 Label miss;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 ParameterCount expected(function->shared()->formal_parameter_count()); 628 ParameterCount expected(function->shared()->formal_parameter_count());
628 __ InvokeCode(code, expected, arguments(), 629 __ InvokeCode(code, expected, arguments(),
629 RelocInfo::CODE_TARGET, JUMP_FUNCTION); 630 RelocInfo::CODE_TARGET, JUMP_FUNCTION);
630 631
631 // Handle call cache miss. 632 // Handle call cache miss.
632 __ bind(&miss); 633 __ bind(&miss);
633 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 634 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
634 __ jmp(ic, RelocInfo::CODE_TARGET); 635 __ jmp(ic, RelocInfo::CODE_TARGET);
635 636
636 // Return the generated code. 637 // Return the generated code.
637 return GetCode(CONSTANT_FUNCTION); 638 String* function_name = NULL;
639 if (function->shared()->name()->IsString()) {
640 function_name = String::cast(function->shared()->name());
641 }
642 return GetCode(CONSTANT_FUNCTION, function_name);
638 } 643 }
639 644
640 645
641 Object* CallStubCompiler::CompileCallInterceptor(Object* object, 646 Object* CallStubCompiler::CompileCallInterceptor(Object* object,
642 JSObject* holder, 647 JSObject* holder,
643 String* name) { 648 String* name) {
644 // ----------- S t a t e ------------- 649 // ----------- S t a t e -------------
645 // ----------------------------------- 650 // -----------------------------------
646 Label miss; 651 Label miss;
647 652
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 705
701 // Invoke the function. 706 // Invoke the function.
702 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION); 707 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION);
703 708
704 // Handle load cache miss. 709 // Handle load cache miss.
705 __ bind(&miss); 710 __ bind(&miss);
706 Handle<Code> ic = ComputeCallMiss(argc); 711 Handle<Code> ic = ComputeCallMiss(argc);
707 __ jmp(ic, RelocInfo::CODE_TARGET); 712 __ jmp(ic, RelocInfo::CODE_TARGET);
708 713
709 // Return the generated code. 714 // Return the generated code.
710 return GetCode(INTERCEPTOR); 715 return GetCode(INTERCEPTOR, name);
711 } 716 }
712 717
713 718
714 Object* StoreStubCompiler::CompileStoreField(JSObject* object, 719 Object* StoreStubCompiler::CompileStoreField(JSObject* object,
715 int index, 720 int index,
716 Map* transition, 721 Map* transition,
717 String* name) { 722 String* name) {
718 // ----------- S t a t e ------------- 723 // ----------- S t a t e -------------
719 // -- eax : value 724 // -- eax : value
720 // -- ecx : name 725 // -- ecx : name
(...skipping 14 matching lines...) Expand all
735 ebx, ecx, edx, 740 ebx, ecx, edx,
736 &miss); 741 &miss);
737 742
738 // Handle store cache miss. 743 // Handle store cache miss.
739 __ bind(&miss); 744 __ bind(&miss);
740 __ mov(ecx, Immediate(Handle<String>(name))); // restore name 745 __ mov(ecx, Immediate(Handle<String>(name))); // restore name
741 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 746 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
742 __ jmp(ic, RelocInfo::CODE_TARGET); 747 __ jmp(ic, RelocInfo::CODE_TARGET);
743 748
744 // Return the generated code. 749 // Return the generated code.
745 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION); 750 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
746 } 751 }
747 752
748 753
749 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object, 754 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object,
750 AccessorInfo* callback, 755 AccessorInfo* callback,
751 String* name) { 756 String* name) {
752 // ----------- S t a t e ------------- 757 // ----------- S t a t e -------------
753 // -- eax : value 758 // -- eax : value
754 // -- ecx : name 759 // -- ecx : name
755 // -- esp[0] : return address 760 // -- esp[0] : return address
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 ExternalReference(IC_Utility(IC::kStoreCallbackProperty)); 795 ExternalReference(IC_Utility(IC::kStoreCallbackProperty));
791 __ TailCallRuntime(store_callback_property, 4); 796 __ TailCallRuntime(store_callback_property, 4);
792 797
793 // Handle store cache miss. 798 // Handle store cache miss.
794 __ bind(&miss); 799 __ bind(&miss);
795 __ mov(ecx, Immediate(Handle<String>(name))); // restore name 800 __ mov(ecx, Immediate(Handle<String>(name))); // restore name
796 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 801 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
797 __ jmp(ic, RelocInfo::CODE_TARGET); 802 __ jmp(ic, RelocInfo::CODE_TARGET);
798 803
799 // Return the generated code. 804 // Return the generated code.
800 return GetCode(CALLBACKS); 805 return GetCode(CALLBACKS, name);
801 } 806 }
802 807
803 808
804 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 809 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
805 String* name) { 810 String* name) {
806 // ----------- S t a t e ------------- 811 // ----------- S t a t e -------------
807 // -- eax : value 812 // -- eax : value
808 // -- ecx : name 813 // -- ecx : name
809 // -- esp[0] : return address 814 // -- esp[0] : return address
810 // -- esp[4] : receiver 815 // -- esp[4] : receiver
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty)); 848 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty));
844 __ TailCallRuntime(store_ic_property, 3); 849 __ TailCallRuntime(store_ic_property, 3);
845 850
846 // Handle store cache miss. 851 // Handle store cache miss.
847 __ bind(&miss); 852 __ bind(&miss);
848 __ mov(ecx, Immediate(Handle<String>(name))); // restore name 853 __ mov(ecx, Immediate(Handle<String>(name))); // restore name
849 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 854 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
850 __ jmp(ic, RelocInfo::CODE_TARGET); 855 __ jmp(ic, RelocInfo::CODE_TARGET);
851 856
852 // Return the generated code. 857 // Return the generated code.
853 return GetCode(INTERCEPTOR); 858 return GetCode(INTERCEPTOR, name);
854 } 859 }
855 860
856 861
857 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 862 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
858 int index, 863 int index,
859 Map* transition, 864 Map* transition,
860 String* name) { 865 String* name) {
861 // ----------- S t a t e ------------- 866 // ----------- S t a t e -------------
862 // -- eax : value 867 // -- eax : value
863 // -- esp[0] : return address 868 // -- esp[0] : return address
(...skipping 22 matching lines...) Expand all
886 ebx, ecx, edx, 891 ebx, ecx, edx,
887 &miss); 892 &miss);
888 893
889 // Handle store cache miss. 894 // Handle store cache miss.
890 __ bind(&miss); 895 __ bind(&miss);
891 __ DecrementCounter(&Counters::keyed_store_field, 1); 896 __ DecrementCounter(&Counters::keyed_store_field, 1);
892 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); 897 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss));
893 __ jmp(ic, RelocInfo::CODE_TARGET); 898 __ jmp(ic, RelocInfo::CODE_TARGET);
894 899
895 // Return the generated code. 900 // Return the generated code.
896 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION); 901 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
897 } 902 }
898 903
899 904
900 Object* LoadStubCompiler::CompileLoadField(JSObject* object, 905 Object* LoadStubCompiler::CompileLoadField(JSObject* object,
901 JSObject* holder, 906 JSObject* holder,
902 int index) { 907 int index,
908 String* name) {
903 // ----------- S t a t e ------------- 909 // ----------- S t a t e -------------
904 // -- ecx : name 910 // -- ecx : name
905 // -- esp[0] : return address 911 // -- esp[0] : return address
906 // -- esp[4] : receiver 912 // -- esp[4] : receiver
907 // ----------------------------------- 913 // -----------------------------------
908 Label miss; 914 Label miss;
909 915
910 __ mov(eax, (Operand(esp, kPointerSize))); 916 __ mov(eax, (Operand(esp, kPointerSize)));
911 GenerateLoadField(masm(), object, holder, eax, ebx, edx, index, &miss); 917 GenerateLoadField(masm(), object, holder, eax, ebx, edx, index, &miss);
912 __ bind(&miss); 918 __ bind(&miss);
913 GenerateLoadMiss(masm(), Code::LOAD_IC); 919 GenerateLoadMiss(masm(), Code::LOAD_IC);
914 920
915 // Return the generated code. 921 // Return the generated code.
916 return GetCode(FIELD); 922 return GetCode(FIELD, name);
917 } 923 }
918 924
919 925
920 Object* LoadStubCompiler::CompileLoadCallback(JSObject* object, 926 Object* LoadStubCompiler::CompileLoadCallback(JSObject* object,
921 JSObject* holder, 927 JSObject* holder,
922 AccessorInfo* callback) { 928 AccessorInfo* callback,
929 String* name) {
923 // ----------- S t a t e ------------- 930 // ----------- S t a t e -------------
924 // -- ecx : name 931 // -- ecx : name
925 // -- esp[0] : return address 932 // -- esp[0] : return address
926 // -- esp[4] : receiver 933 // -- esp[4] : receiver
927 // ----------------------------------- 934 // -----------------------------------
928 Label miss; 935 Label miss;
929 936
930 __ mov(eax, (Operand(esp, kPointerSize))); 937 __ mov(eax, (Operand(esp, kPointerSize)));
931 GenerateLoadCallback(masm(), object, holder, eax, ecx, ebx, 938 GenerateLoadCallback(masm(), object, holder, eax, ecx, ebx,
932 edx, callback, &miss); 939 edx, callback, &miss);
933 __ bind(&miss); 940 __ bind(&miss);
934 GenerateLoadMiss(masm(), Code::LOAD_IC); 941 GenerateLoadMiss(masm(), Code::LOAD_IC);
935 942
936 // Return the generated code. 943 // Return the generated code.
937 return GetCode(CALLBACKS); 944 return GetCode(CALLBACKS, name);
938 } 945 }
939 946
940 947
941 Object* LoadStubCompiler::CompileLoadConstant(JSObject* object, 948 Object* LoadStubCompiler::CompileLoadConstant(JSObject* object,
942 JSObject* holder, 949 JSObject* holder,
943 Object* value) { 950 Object* value,
951 String* name) {
944 // ----------- S t a t e ------------- 952 // ----------- S t a t e -------------
945 // -- ecx : name 953 // -- ecx : name
946 // -- esp[0] : return address 954 // -- esp[0] : return address
947 // -- esp[4] : receiver 955 // -- esp[4] : receiver
948 // ----------------------------------- 956 // -----------------------------------
949 Label miss; 957 Label miss;
950 958
951 __ mov(eax, (Operand(esp, kPointerSize))); 959 __ mov(eax, (Operand(esp, kPointerSize)));
952 GenerateLoadConstant(masm(), object, holder, eax, ebx, edx, value, &miss); 960 GenerateLoadConstant(masm(), object, holder, eax, ebx, edx, value, &miss);
953 __ bind(&miss); 961 __ bind(&miss);
954 GenerateLoadMiss(masm(), Code::LOAD_IC); 962 GenerateLoadMiss(masm(), Code::LOAD_IC);
955 963
956 // Return the generated code. 964 // Return the generated code.
957 return GetCode(CONSTANT_FUNCTION); 965 return GetCode(CONSTANT_FUNCTION, name);
958 } 966 }
959 967
960 968
961 Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, 969 Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
962 JSObject* holder, 970 JSObject* holder,
963 String* name) { 971 String* name) {
964 // ----------- S t a t e ------------- 972 // ----------- S t a t e -------------
965 // -- ecx : name 973 // -- ecx : name
966 // -- esp[0] : return address 974 // -- esp[0] : return address
967 // -- esp[4] : receiver 975 // -- esp[4] : receiver
968 // ----------------------------------- 976 // -----------------------------------
969 Label miss; 977 Label miss;
970 978
971 __ mov(eax, (Operand(esp, kPointerSize))); 979 __ mov(eax, (Operand(esp, kPointerSize)));
972 GenerateLoadInterceptor(masm(), receiver, holder, eax, ecx, edx, ebx, &miss); 980 GenerateLoadInterceptor(masm(), receiver, holder, eax, ecx, edx, ebx, &miss);
973 __ bind(&miss); 981 __ bind(&miss);
974 GenerateLoadMiss(masm(), Code::LOAD_IC); 982 GenerateLoadMiss(masm(), Code::LOAD_IC);
975 983
976 // Return the generated code. 984 // Return the generated code.
977 return GetCode(INTERCEPTOR); 985 return GetCode(INTERCEPTOR, name);
978 } 986 }
979 987
980 988
981 Object* KeyedLoadStubCompiler::CompileLoadField(String* name, 989 Object* KeyedLoadStubCompiler::CompileLoadField(String* name,
982 JSObject* receiver, 990 JSObject* receiver,
983 JSObject* holder, 991 JSObject* holder,
984 int index) { 992 int index) {
985 // ----------- S t a t e ------------- 993 // ----------- S t a t e -------------
986 // -- esp[0] : return address 994 // -- esp[0] : return address
987 // -- esp[4] : name 995 // -- esp[4] : name
988 // -- esp[8] : receiver 996 // -- esp[8] : receiver
989 // ----------------------------------- 997 // -----------------------------------
990 Label miss; 998 Label miss;
991 999
992 __ mov(eax, (Operand(esp, kPointerSize))); 1000 __ mov(eax, (Operand(esp, kPointerSize)));
993 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1001 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
994 __ IncrementCounter(&Counters::keyed_load_field, 1); 1002 __ IncrementCounter(&Counters::keyed_load_field, 1);
995 1003
996 // Check that the name has not changed. 1004 // Check that the name has not changed.
997 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1005 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
998 __ j(not_equal, &miss, not_taken); 1006 __ j(not_equal, &miss, not_taken);
999 1007
1000 GenerateLoadField(masm(), receiver, holder, ecx, ebx, edx, index, &miss); 1008 GenerateLoadField(masm(), receiver, holder, ecx, ebx, edx, index, &miss);
1001 __ bind(&miss); 1009 __ bind(&miss);
1002 __ DecrementCounter(&Counters::keyed_load_field, 1); 1010 __ DecrementCounter(&Counters::keyed_load_field, 1);
1003 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1011 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1004 1012
1005 // Return the generated code. 1013 // Return the generated code.
1006 return GetCode(FIELD); 1014 return GetCode(FIELD, name);
1007 } 1015 }
1008 1016
1009 1017
1010 Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name, 1018 Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name,
1011 JSObject* receiver, 1019 JSObject* receiver,
1012 JSObject* holder, 1020 JSObject* holder,
1013 AccessorInfo* callback) { 1021 AccessorInfo* callback) {
1014 // ----------- S t a t e ------------- 1022 // ----------- S t a t e -------------
1015 // -- esp[0] : return address 1023 // -- esp[0] : return address
1016 // -- esp[4] : name 1024 // -- esp[4] : name
1017 // -- esp[8] : receiver 1025 // -- esp[8] : receiver
1018 // ----------------------------------- 1026 // -----------------------------------
1019 Label miss; 1027 Label miss;
1020 1028
1021 __ mov(eax, (Operand(esp, kPointerSize))); 1029 __ mov(eax, (Operand(esp, kPointerSize)));
1022 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1030 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1023 __ IncrementCounter(&Counters::keyed_load_callback, 1); 1031 __ IncrementCounter(&Counters::keyed_load_callback, 1);
1024 1032
1025 // Check that the name has not changed. 1033 // Check that the name has not changed.
1026 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1034 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1027 __ j(not_equal, &miss, not_taken); 1035 __ j(not_equal, &miss, not_taken);
1028 1036
1029 GenerateLoadCallback(masm(), receiver, holder, ecx, eax, ebx, edx, 1037 GenerateLoadCallback(masm(), receiver, holder, ecx, eax, ebx, edx,
1030 callback, &miss); 1038 callback, &miss);
1031 __ bind(&miss); 1039 __ bind(&miss);
1032 __ DecrementCounter(&Counters::keyed_load_callback, 1); 1040 __ DecrementCounter(&Counters::keyed_load_callback, 1);
1033 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1041 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1034 1042
1035 // Return the generated code. 1043 // Return the generated code.
1036 return GetCode(CALLBACKS); 1044 return GetCode(CALLBACKS, name);
1037 } 1045 }
1038 1046
1039 1047
1040 Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name, 1048 Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name,
1041 JSObject* receiver, 1049 JSObject* receiver,
1042 JSObject* holder, 1050 JSObject* holder,
1043 Object* value) { 1051 Object* value) {
1044 // ----------- S t a t e ------------- 1052 // ----------- S t a t e -------------
1045 // -- esp[0] : return address 1053 // -- esp[0] : return address
1046 // -- esp[4] : name 1054 // -- esp[4] : name
1047 // -- esp[8] : receiver 1055 // -- esp[8] : receiver
1048 // ----------------------------------- 1056 // -----------------------------------
1049 Label miss; 1057 Label miss;
1050 1058
1051 __ mov(eax, (Operand(esp, kPointerSize))); 1059 __ mov(eax, (Operand(esp, kPointerSize)));
1052 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1060 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1053 __ IncrementCounter(&Counters::keyed_load_constant_function, 1); 1061 __ IncrementCounter(&Counters::keyed_load_constant_function, 1);
1054 1062
1055 // Check that the name has not changed. 1063 // Check that the name has not changed.
1056 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1064 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1057 __ j(not_equal, &miss, not_taken); 1065 __ j(not_equal, &miss, not_taken);
1058 1066
1059 GenerateLoadConstant(masm(), receiver, holder, ecx, ebx, edx, value, &miss); 1067 GenerateLoadConstant(masm(), receiver, holder, ecx, ebx, edx, value, &miss);
1060 __ bind(&miss); 1068 __ bind(&miss);
1061 __ DecrementCounter(&Counters::keyed_load_constant_function, 1); 1069 __ DecrementCounter(&Counters::keyed_load_constant_function, 1);
1062 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1070 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1063 1071
1064 // Return the generated code. 1072 // Return the generated code.
1065 return GetCode(CONSTANT_FUNCTION); 1073 return GetCode(CONSTANT_FUNCTION, name);
1066 } 1074 }
1067 1075
1068 1076
1069 Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, 1077 Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
1070 JSObject* holder, 1078 JSObject* holder,
1071 String* name) { 1079 String* name) {
1072 // ----------- S t a t e ------------- 1080 // ----------- S t a t e -------------
1073 // -- esp[0] : return address 1081 // -- esp[0] : return address
1074 // -- esp[4] : name 1082 // -- esp[4] : name
1075 // -- esp[8] : receiver 1083 // -- esp[8] : receiver
1076 // ----------------------------------- 1084 // -----------------------------------
1077 Label miss; 1085 Label miss;
1078 1086
1079 __ mov(eax, (Operand(esp, kPointerSize))); 1087 __ mov(eax, (Operand(esp, kPointerSize)));
1080 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1088 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1081 __ IncrementCounter(&Counters::keyed_load_interceptor, 1); 1089 __ IncrementCounter(&Counters::keyed_load_interceptor, 1);
1082 1090
1083 // Check that the name has not changed. 1091 // Check that the name has not changed.
1084 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1092 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1085 __ j(not_equal, &miss, not_taken); 1093 __ j(not_equal, &miss, not_taken);
1086 1094
1087 GenerateLoadInterceptor(masm(), receiver, holder, ecx, eax, edx, ebx, &miss); 1095 GenerateLoadInterceptor(masm(), receiver, holder, ecx, eax, edx, ebx, &miss);
1088 __ bind(&miss); 1096 __ bind(&miss);
1089 __ DecrementCounter(&Counters::keyed_load_interceptor, 1); 1097 __ DecrementCounter(&Counters::keyed_load_interceptor, 1);
1090 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1098 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1091 1099
1092 // Return the generated code. 1100 // Return the generated code.
1093 return GetCode(INTERCEPTOR); 1101 return GetCode(INTERCEPTOR, name);
1094 } 1102 }
1095 1103
1096 1104
1097 1105
1098 1106
1099 Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) { 1107 Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
1100 // ----------- S t a t e ------------- 1108 // ----------- S t a t e -------------
1101 // -- esp[0] : return address 1109 // -- esp[0] : return address
1102 // -- esp[4] : name 1110 // -- esp[4] : name
1103 // -- esp[8] : receiver 1111 // -- esp[8] : receiver
1104 // ----------------------------------- 1112 // -----------------------------------
1105 Label miss; 1113 Label miss;
1106 1114
1107 __ mov(eax, (Operand(esp, kPointerSize))); 1115 __ mov(eax, (Operand(esp, kPointerSize)));
1108 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1116 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1109 __ IncrementCounter(&Counters::keyed_load_array_length, 1); 1117 __ IncrementCounter(&Counters::keyed_load_array_length, 1);
1110 1118
1111 // Check that the name has not changed. 1119 // Check that the name has not changed.
1112 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1120 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1113 __ j(not_equal, &miss, not_taken); 1121 __ j(not_equal, &miss, not_taken);
1114 1122
1115 GenerateLoadArrayLength(masm(), ecx, edx, &miss); 1123 GenerateLoadArrayLength(masm(), ecx, edx, &miss);
1116 __ bind(&miss); 1124 __ bind(&miss);
1117 __ DecrementCounter(&Counters::keyed_load_array_length, 1); 1125 __ DecrementCounter(&Counters::keyed_load_array_length, 1);
1118 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1126 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1119 1127
1120 // Return the generated code. 1128 // Return the generated code.
1121 return GetCode(CALLBACKS); 1129 return GetCode(CALLBACKS, name);
1122 } 1130 }
1123 1131
1124 1132
1125 Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { 1133 Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
1126 // ----------- S t a t e ------------- 1134 // ----------- S t a t e -------------
1127 // -- esp[0] : return address 1135 // -- esp[0] : return address
1128 // -- esp[4] : name 1136 // -- esp[4] : name
1129 // -- esp[8] : receiver 1137 // -- esp[8] : receiver
1130 // ----------------------------------- 1138 // -----------------------------------
1131 Label miss; 1139 Label miss;
1132 1140
1133 __ mov(eax, (Operand(esp, kPointerSize))); 1141 __ mov(eax, (Operand(esp, kPointerSize)));
1134 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1142 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1135 __ IncrementCounter(&Counters::keyed_load_string_length, 1); 1143 __ IncrementCounter(&Counters::keyed_load_string_length, 1);
1136 1144
1137 // Check that the name has not changed. 1145 // Check that the name has not changed.
1138 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1146 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1139 __ j(not_equal, &miss, not_taken); 1147 __ j(not_equal, &miss, not_taken);
1140 1148
1141 GenerateLoadStringLength(masm(), ecx, edx, &miss); 1149 GenerateLoadStringLength(masm(), ecx, edx, &miss);
1142 __ bind(&miss); 1150 __ bind(&miss);
1143 __ DecrementCounter(&Counters::keyed_load_string_length, 1); 1151 __ DecrementCounter(&Counters::keyed_load_string_length, 1);
1144 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1152 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1145 1153
1146 // Return the generated code. 1154 // Return the generated code.
1147 return GetCode(CALLBACKS); 1155 return GetCode(CALLBACKS, name);
1148 } 1156 }
1149 1157
1150 1158
1151 Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) { 1159 Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
1152 // ----------- S t a t e ------------- 1160 // ----------- S t a t e -------------
1153 // -- esp[0] : return address 1161 // -- esp[0] : return address
1154 // -- esp[4] : name 1162 // -- esp[4] : name
1155 // -- esp[8] : receiver 1163 // -- esp[8] : receiver
1156 // ----------------------------------- 1164 // -----------------------------------
1157 Label miss; 1165 Label miss;
1158 1166
1159 __ mov(eax, (Operand(esp, kPointerSize))); 1167 __ mov(eax, (Operand(esp, kPointerSize)));
1160 __ mov(ecx, (Operand(esp, 2 * kPointerSize))); 1168 __ mov(ecx, (Operand(esp, 2 * kPointerSize)));
1161 __ IncrementCounter(&Counters::keyed_load_function_prototype, 1); 1169 __ IncrementCounter(&Counters::keyed_load_function_prototype, 1);
1162 1170
1163 // Check that the name has not changed. 1171 // Check that the name has not changed.
1164 __ cmp(Operand(eax), Immediate(Handle<String>(name))); 1172 __ cmp(Operand(eax), Immediate(Handle<String>(name)));
1165 __ j(not_equal, &miss, not_taken); 1173 __ j(not_equal, &miss, not_taken);
1166 1174
1167 GenerateLoadFunctionPrototype(masm(), ecx, edx, ebx, &miss); 1175 GenerateLoadFunctionPrototype(masm(), ecx, edx, ebx, &miss);
1168 __ bind(&miss); 1176 __ bind(&miss);
1169 __ DecrementCounter(&Counters::keyed_load_function_prototype, 1); 1177 __ DecrementCounter(&Counters::keyed_load_function_prototype, 1);
1170 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1178 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1171 1179
1172 // Return the generated code. 1180 // Return the generated code.
1173 return GetCode(CALLBACKS); 1181 return GetCode(CALLBACKS, name);
1174 } 1182 }
1175 1183
1176 1184
1177 #undef __ 1185 #undef __
1178 1186
1179 } } // namespace v8::internal 1187 } } // namespace v8::internal
OLDNEW
« src/stub-cache.cc ('K') | « src/stub-cache-arm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698