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

Side by Side Diff: src/stub-cache-arm.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
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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 481
482 // Restore saved function. 482 // Restore saved function.
483 __ pop(r1); 483 __ pop(r1);
484 484
485 // Tear down temporary frame. 485 // Tear down temporary frame.
486 __ LeaveInternalFrame(); 486 __ LeaveInternalFrame();
487 487
488 // Do a tail-call of the compiled function. 488 // Do a tail-call of the compiled function.
489 __ Jump(r2); 489 __ Jump(r2);
490 490
491 return GetCodeWithFlags(flags); 491 return GetCodeWithFlags(flags, "LazyCompileStub");
492 } 492 }
493 493
494 494
495 Object* CallStubCompiler::CompileCallField(Object* object, 495 Object* CallStubCompiler::CompileCallField(Object* object,
496 JSObject* holder, 496 JSObject* holder,
497 int index) { 497 int index,
498 String* name) {
498 // ----------- S t a t e ------------- 499 // ----------- S t a t e -------------
499 // -- lr: return address 500 // -- lr: return address
500 // ----------------------------------- 501 // -----------------------------------
501 Label miss; 502 Label miss;
502 503
503 const int argc = arguments().immediate(); 504 const int argc = arguments().immediate();
504 505
505 // Get the receiver of the function from the stack into r0. 506 // Get the receiver of the function from the stack into r0.
506 __ ldr(r0, MemOperand(sp, argc * kPointerSize)); 507 __ ldr(r0, MemOperand(sp, argc * kPointerSize));
507 // Check that the receiver isn't a smi. 508 // Check that the receiver isn't a smi.
(...skipping 23 matching lines...) Expand all
531 532
532 // Invoke the function. 533 // Invoke the function.
533 __ InvokeFunction(r1, arguments(), JUMP_FUNCTION); 534 __ InvokeFunction(r1, arguments(), JUMP_FUNCTION);
534 535
535 // Handle call cache miss. 536 // Handle call cache miss.
536 __ bind(&miss); 537 __ bind(&miss);
537 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 538 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
538 __ Jump(ic, RelocInfo::CODE_TARGET); 539 __ Jump(ic, RelocInfo::CODE_TARGET);
539 540
540 // Return the generated code. 541 // Return the generated code.
541 return GetCode(FIELD); 542 return GetCode(FIELD, name);
542 } 543 }
543 544
544 545
545 Object* CallStubCompiler::CompileCallConstant(Object* object, 546 Object* CallStubCompiler::CompileCallConstant(Object* object,
546 JSObject* holder, 547 JSObject* holder,
547 JSFunction* function, 548 JSFunction* function,
548 CheckType check) { 549 CheckType check) {
549 // ----------- S t a t e ------------- 550 // ----------- S t a t e -------------
550 // -- lr: return address 551 // -- lr: return address
551 // ----------------------------------- 552 // -----------------------------------
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 ParameterCount expected(function->shared()->formal_parameter_count()); 653 ParameterCount expected(function->shared()->formal_parameter_count());
653 __ InvokeCode(code, expected, arguments(), 654 __ InvokeCode(code, expected, arguments(),
654 RelocInfo::CODE_TARGET, JUMP_FUNCTION); 655 RelocInfo::CODE_TARGET, JUMP_FUNCTION);
655 656
656 // Handle call cache miss. 657 // Handle call cache miss.
657 __ bind(&miss); 658 __ bind(&miss);
658 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 659 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
659 __ Jump(ic, RelocInfo::CODE_TARGET); 660 __ Jump(ic, RelocInfo::CODE_TARGET);
660 661
661 // Return the generated code. 662 // Return the generated code.
662 return GetCode(CONSTANT_FUNCTION); 663 String* function_name = NULL;
664 if (function->shared()->name()->IsString()) {
665 function_name = String::cast(function->shared()->name());
666 }
667 return GetCode(CONSTANT_FUNCTION, function_name);
663 } 668 }
664 669
665 670
666 Object* CallStubCompiler::CompileCallInterceptor(Object* object, 671 Object* CallStubCompiler::CompileCallInterceptor(Object* object,
667 JSObject* holder, 672 JSObject* holder,
668 String* name) { 673 String* name) {
669 // ----------- S t a t e ------------- 674 // ----------- S t a t e -------------
670 // -- lr: return address 675 // -- lr: return address
671 // ----------------------------------- 676 // -----------------------------------
672 Label miss; 677 Label miss;
673 678
674 // TODO(1224669): Implement. 679 // TODO(1224669): Implement.
675 680
676 // Handle call cache miss. 681 // Handle call cache miss.
677 __ bind(&miss); 682 __ bind(&miss);
678 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 683 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
679 __ Jump(ic, RelocInfo::CODE_TARGET); 684 __ Jump(ic, RelocInfo::CODE_TARGET);
680 685
681 // Return the generated code. 686 // Return the generated code.
682 return GetCode(INTERCEPTOR); 687 return GetCode(INTERCEPTOR, name);
683 } 688 }
684 689
685 690
686 Object* StoreStubCompiler::CompileStoreField(JSObject* object, 691 Object* StoreStubCompiler::CompileStoreField(JSObject* object,
687 int index, 692 int index,
688 Map* transition, 693 Map* transition,
689 String* name) { 694 String* name) {
690 // ----------- S t a t e ------------- 695 // ----------- S t a t e -------------
691 // -- r0 : value 696 // -- r0 : value
692 // -- r2 : name 697 // -- r2 : name
(...skipping 12 matching lines...) Expand all
705 index, 710 index,
706 transition, 711 transition,
707 r3, r2, r1, 712 r3, r2, r1,
708 &miss); 713 &miss);
709 __ bind(&miss); 714 __ bind(&miss);
710 __ mov(r2, Operand(Handle<String>(name))); // restore name 715 __ mov(r2, Operand(Handle<String>(name))); // restore name
711 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 716 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
712 __ Jump(ic, RelocInfo::CODE_TARGET); 717 __ Jump(ic, RelocInfo::CODE_TARGET);
713 718
714 // Return the generated code. 719 // Return the generated code.
715 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION); 720 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
716 } 721 }
717 722
718 723
719 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object, 724 Object* StoreStubCompiler::CompileStoreCallback(JSObject* object,
720 AccessorInfo* callback, 725 AccessorInfo* callback,
721 String* name) { 726 String* name) {
722 // ----------- S t a t e ------------- 727 // ----------- S t a t e -------------
723 // -- r0 : value 728 // -- r0 : value
724 // -- r2 : name 729 // -- r2 : name
725 // -- lr : return address 730 // -- lr : return address
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 ExternalReference(IC_Utility(IC::kStoreCallbackProperty)); 765 ExternalReference(IC_Utility(IC::kStoreCallbackProperty));
761 __ TailCallRuntime(store_callback_property, 4); 766 __ TailCallRuntime(store_callback_property, 4);
762 767
763 // Handle store cache miss. 768 // Handle store cache miss.
764 __ bind(&miss); 769 __ bind(&miss);
765 __ mov(r2, Operand(Handle<String>(name))); // restore name 770 __ mov(r2, Operand(Handle<String>(name))); // restore name
766 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 771 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
767 __ Jump(ic, RelocInfo::CODE_TARGET); 772 __ Jump(ic, RelocInfo::CODE_TARGET);
768 773
769 // Return the generated code. 774 // Return the generated code.
770 return GetCode(CALLBACKS); 775 return GetCode(CALLBACKS, name);
771 } 776 }
772 777
773 778
774 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 779 Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
775 String* name) { 780 String* name) {
776 // ----------- S t a t e ------------- 781 // ----------- S t a t e -------------
777 // -- r0 : value 782 // -- r0 : value
778 // -- r2 : name 783 // -- r2 : name
779 // -- lr : return address 784 // -- lr : return address
780 // -- [sp] : receiver 785 // -- [sp] : receiver
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty)); 817 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty));
813 __ TailCallRuntime(store_ic_property, 3); 818 __ TailCallRuntime(store_ic_property, 3);
814 819
815 // Handle store cache miss. 820 // Handle store cache miss.
816 __ bind(&miss); 821 __ bind(&miss);
817 __ mov(r2, Operand(Handle<String>(name))); // restore name 822 __ mov(r2, Operand(Handle<String>(name))); // restore name
818 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); 823 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
819 __ Jump(ic, RelocInfo::CODE_TARGET); 824 __ Jump(ic, RelocInfo::CODE_TARGET);
820 825
821 // Return the generated code. 826 // Return the generated code.
822 return GetCode(INTERCEPTOR); 827 return GetCode(INTERCEPTOR, name);
823 } 828 }
824 829
825 830
826 Object* LoadStubCompiler::CompileLoadField(JSObject* object, 831 Object* LoadStubCompiler::CompileLoadField(JSObject* object,
827 JSObject* holder, 832 JSObject* holder,
828 int index) { 833 int index,
834 String* name) {
829 // ----------- S t a t e ------------- 835 // ----------- S t a t e -------------
830 // -- r2 : name 836 // -- r2 : name
831 // -- lr : return address 837 // -- lr : return address
832 // -- [sp] : receiver 838 // -- [sp] : receiver
833 // ----------------------------------- 839 // -----------------------------------
834 Label miss; 840 Label miss;
835 841
836 __ ldr(r0, MemOperand(sp, 0)); 842 __ ldr(r0, MemOperand(sp, 0));
837 843
838 GenerateLoadField(masm(), object, holder, r0, r3, r1, index, &miss); 844 GenerateLoadField(masm(), object, holder, r0, r3, r1, index, &miss);
839 __ bind(&miss); 845 __ bind(&miss);
840 GenerateLoadMiss(masm(), Code::LOAD_IC); 846 GenerateLoadMiss(masm(), Code::LOAD_IC);
841 847
842 // Return the generated code. 848 // Return the generated code.
843 return GetCode(FIELD); 849 return GetCode(FIELD, name);
844 } 850 }
845 851
846 852
847 Object* LoadStubCompiler::CompileLoadCallback(JSObject* object, 853 Object* LoadStubCompiler::CompileLoadCallback(JSObject* object,
848 JSObject* holder, 854 JSObject* holder,
849 AccessorInfo* callback) { 855 AccessorInfo* callback,
856 String* name) {
850 // ----------- S t a t e ------------- 857 // ----------- S t a t e -------------
851 // -- r2 : name 858 // -- r2 : name
852 // -- lr : return address 859 // -- lr : return address
853 // -- [sp] : receiver 860 // -- [sp] : receiver
854 // ----------------------------------- 861 // -----------------------------------
855 Label miss; 862 Label miss;
856 863
857 __ ldr(r0, MemOperand(sp, 0)); 864 __ ldr(r0, MemOperand(sp, 0));
858 GenerateLoadCallback(masm(), object, holder, r0, r2, r3, r1, callback, &miss); 865 GenerateLoadCallback(masm(), object, holder, r0, r2, r3, r1, callback, &miss);
859 __ bind(&miss); 866 __ bind(&miss);
860 GenerateLoadMiss(masm(), Code::LOAD_IC); 867 GenerateLoadMiss(masm(), Code::LOAD_IC);
861 868
862 // Return the generated code. 869 // Return the generated code.
863 return GetCode(CALLBACKS); 870 return GetCode(CALLBACKS, name);
864 } 871 }
865 872
866 873
867 Object* LoadStubCompiler::CompileLoadConstant(JSObject* object, 874 Object* LoadStubCompiler::CompileLoadConstant(JSObject* object,
868 JSObject* holder, 875 JSObject* holder,
869 Object* value) { 876 Object* value,
877 String* name) {
870 // ----------- S t a t e ------------- 878 // ----------- S t a t e -------------
871 // -- r2 : name 879 // -- r2 : name
872 // -- lr : return address 880 // -- lr : return address
873 // -- [sp] : receiver 881 // -- [sp] : receiver
874 // ----------------------------------- 882 // -----------------------------------
875 Label miss; 883 Label miss;
876 884
877 __ ldr(r0, MemOperand(sp, 0)); 885 __ ldr(r0, MemOperand(sp, 0));
878 886
879 GenerateLoadConstant(masm(), object, holder, r0, r3, r1, value, &miss); 887 GenerateLoadConstant(masm(), object, holder, r0, r3, r1, value, &miss);
880 __ bind(&miss); 888 __ bind(&miss);
881 GenerateLoadMiss(masm(), Code::LOAD_IC); 889 GenerateLoadMiss(masm(), Code::LOAD_IC);
882 890
883 // Return the generated code. 891 // Return the generated code.
884 return GetCode(CONSTANT_FUNCTION); 892 return GetCode(CONSTANT_FUNCTION, name);
885 } 893 }
886 894
887 895
888 Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* object, 896 Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* object,
889 JSObject* holder, 897 JSObject* holder,
890 String* name) { 898 String* name) {
891 // ----------- S t a t e ------------- 899 // ----------- S t a t e -------------
892 // -- r2 : name 900 // -- r2 : name
893 // -- lr : return address 901 // -- lr : return address
894 // -- [sp] : receiver 902 // -- [sp] : receiver
895 // ----------------------------------- 903 // -----------------------------------
896 Label miss; 904 Label miss;
897 905
898 __ ldr(r0, MemOperand(sp, 0)); 906 __ ldr(r0, MemOperand(sp, 0));
899 907
900 GenerateLoadInterceptor(masm(), object, holder, r0, r2, r3, r1, &miss); 908 GenerateLoadInterceptor(masm(), object, holder, r0, r2, r3, r1, &miss);
901 __ bind(&miss); 909 __ bind(&miss);
902 GenerateLoadMiss(masm(), Code::LOAD_IC); 910 GenerateLoadMiss(masm(), Code::LOAD_IC);
903 911
904 // Return the generated code. 912 // Return the generated code.
905 return GetCode(INTERCEPTOR); 913 return GetCode(INTERCEPTOR, name);
906 } 914 }
907 915
908 916
909 // TODO(1224671): IC stubs for keyed loads have not been implemented 917 // TODO(1224671): IC stubs for keyed loads have not been implemented
910 // for ARM. 918 // for ARM.
911 Object* KeyedLoadStubCompiler::CompileLoadField(String* name, 919 Object* KeyedLoadStubCompiler::CompileLoadField(String* name,
912 JSObject* receiver, 920 JSObject* receiver,
913 JSObject* holder, 921 JSObject* holder,
914 int index) { 922 int index) {
915 // ----------- S t a t e ------------- 923 // ----------- S t a t e -------------
916 // -- lr : return address 924 // -- lr : return address
917 // -- sp[0] : key 925 // -- sp[0] : key
918 // -- sp[4] : receiver 926 // -- sp[4] : receiver
919 // ----------------------------------- 927 // -----------------------------------
920 Label miss; 928 Label miss;
921 929
922 __ ldr(r2, MemOperand(sp, 0)); 930 __ ldr(r2, MemOperand(sp, 0));
923 __ ldr(r0, MemOperand(sp, kPointerSize)); 931 __ ldr(r0, MemOperand(sp, kPointerSize));
924 932
925 __ cmp(r2, Operand(Handle<String>(name))); 933 __ cmp(r2, Operand(Handle<String>(name)));
926 __ b(ne, &miss); 934 __ b(ne, &miss);
927 935
928 GenerateLoadField(masm(), receiver, holder, r0, r3, r1, index, &miss); 936 GenerateLoadField(masm(), receiver, holder, r0, r3, r1, index, &miss);
929 __ bind(&miss); 937 __ bind(&miss);
930 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 938 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
931 939
932 return GetCode(FIELD); 940 return GetCode(FIELD, name);
933 } 941 }
934 942
935 943
936 Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name, 944 Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name,
937 JSObject* receiver, 945 JSObject* receiver,
938 JSObject* holder, 946 JSObject* holder,
939 AccessorInfo* callback) { 947 AccessorInfo* callback) {
940 // ----------- S t a t e ------------- 948 // ----------- S t a t e -------------
941 // -- lr : return address 949 // -- lr : return address
942 // -- sp[0] : key 950 // -- sp[0] : key
943 // -- sp[4] : receiver 951 // -- sp[4] : receiver
944 // ----------------------------------- 952 // -----------------------------------
945 Label miss; 953 Label miss;
946 954
947 __ ldr(r2, MemOperand(sp, 0)); 955 __ ldr(r2, MemOperand(sp, 0));
948 __ ldr(r0, MemOperand(sp, kPointerSize)); 956 __ ldr(r0, MemOperand(sp, kPointerSize));
949 957
950 __ cmp(r2, Operand(Handle<String>(name))); 958 __ cmp(r2, Operand(Handle<String>(name)));
951 __ b(ne, &miss); 959 __ b(ne, &miss);
952 960
953 GenerateLoadCallback(masm(), receiver, holder, r0, r2, r3, 961 GenerateLoadCallback(masm(), receiver, holder, r0, r2, r3,
954 r1, callback, &miss); 962 r1, callback, &miss);
955 __ bind(&miss); 963 __ bind(&miss);
956 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 964 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
957 965
958 return GetCode(CALLBACKS); 966 return GetCode(CALLBACKS, name);
959 } 967 }
960 968
961 969
962 Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name, 970 Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name,
963 JSObject* receiver, 971 JSObject* receiver,
964 JSObject* holder, 972 JSObject* holder,
965 Object* value) { 973 Object* value) {
966 // ----------- S t a t e ------------- 974 // ----------- S t a t e -------------
967 // -- lr : return address 975 // -- lr : return address
968 // -- sp[0] : key 976 // -- sp[0] : key
969 // -- sp[4] : receiver 977 // -- sp[4] : receiver
970 // ----------------------------------- 978 // -----------------------------------
971 Label miss; 979 Label miss;
972 980
973 // Check the key is the cached one 981 // Check the key is the cached one
974 __ ldr(r2, MemOperand(sp, 0)); 982 __ ldr(r2, MemOperand(sp, 0));
975 __ ldr(r0, MemOperand(sp, kPointerSize)); 983 __ ldr(r0, MemOperand(sp, kPointerSize));
976 984
977 __ cmp(r2, Operand(Handle<String>(name))); 985 __ cmp(r2, Operand(Handle<String>(name)));
978 __ b(ne, &miss); 986 __ b(ne, &miss);
979 987
980 GenerateLoadConstant(masm(), receiver, holder, r0, r3, r1, value, &miss); 988 GenerateLoadConstant(masm(), receiver, holder, r0, r3, r1, value, &miss);
981 __ bind(&miss); 989 __ bind(&miss);
982 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 990 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
983 991
984 // Return the generated code. 992 // Return the generated code.
985 return GetCode(CONSTANT_FUNCTION); 993 return GetCode(CONSTANT_FUNCTION, name);
986 } 994 }
987 995
988 996
989 Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, 997 Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
990 JSObject* holder, 998 JSObject* holder,
991 String* name) { 999 String* name) {
992 // ----------- S t a t e ------------- 1000 // ----------- S t a t e -------------
993 // -- lr : return address 1001 // -- lr : return address
994 // -- sp[0] : key 1002 // -- sp[0] : key
995 // -- sp[4] : receiver 1003 // -- sp[4] : receiver
996 // ----------------------------------- 1004 // -----------------------------------
997 Label miss; 1005 Label miss;
998 1006
999 // Check the key is the cached one 1007 // Check the key is the cached one
1000 __ ldr(r2, MemOperand(sp, 0)); 1008 __ ldr(r2, MemOperand(sp, 0));
1001 __ ldr(r0, MemOperand(sp, kPointerSize)); 1009 __ ldr(r0, MemOperand(sp, kPointerSize));
1002 1010
1003 __ cmp(r2, Operand(Handle<String>(name))); 1011 __ cmp(r2, Operand(Handle<String>(name)));
1004 __ b(ne, &miss); 1012 __ b(ne, &miss);
1005 1013
1006 GenerateLoadInterceptor(masm(), receiver, holder, r0, r2, r3, r1, &miss); 1014 GenerateLoadInterceptor(masm(), receiver, holder, r0, r2, r3, r1, &miss);
1007 __ bind(&miss); 1015 __ bind(&miss);
1008 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1016 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1009 1017
1010 return GetCode(INTERCEPTOR); 1018 return GetCode(INTERCEPTOR, name);
1011 } 1019 }
1012 1020
1013 1021
1014 Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) { 1022 Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
1015 // ----------- S t a t e ------------- 1023 // ----------- S t a t e -------------
1016 // -- lr : return address 1024 // -- lr : return address
1017 // -- sp[0] : key 1025 // -- sp[0] : key
1018 // -- sp[4] : receiver 1026 // -- sp[4] : receiver
1019 // ----------------------------------- 1027 // -----------------------------------
1020 Label miss; 1028 Label miss;
1021 1029
1022 // Check the key is the cached one 1030 // Check the key is the cached one
1023 __ ldr(r2, MemOperand(sp, 0)); 1031 __ ldr(r2, MemOperand(sp, 0));
1024 __ ldr(r0, MemOperand(sp, kPointerSize)); 1032 __ ldr(r0, MemOperand(sp, kPointerSize));
1025 1033
1026 __ cmp(r2, Operand(Handle<String>(name))); 1034 __ cmp(r2, Operand(Handle<String>(name)));
1027 __ b(ne, &miss); 1035 __ b(ne, &miss);
1028 1036
1029 GenerateLoadArrayLength(masm(), r0, r3, &miss); 1037 GenerateLoadArrayLength(masm(), r0, r3, &miss);
1030 __ bind(&miss); 1038 __ bind(&miss);
1031 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1039 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1032 1040
1033 return GetCode(CALLBACKS); 1041 return GetCode(CALLBACKS, name);
1034 } 1042 }
1035 1043
1036 1044
1037 Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { 1045 Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
1038 // ----------- S t a t e ------------- 1046 // ----------- S t a t e -------------
1039 // -- lr : return address 1047 // -- lr : return address
1040 // -- sp[0] : key 1048 // -- sp[0] : key
1041 // -- sp[4] : receiver 1049 // -- sp[4] : receiver
1042 // ----------------------------------- 1050 // -----------------------------------
1043 Label miss; 1051 Label miss;
1044 __ IncrementCounter(&Counters::keyed_load_string_length, 1, r1, r3); 1052 __ IncrementCounter(&Counters::keyed_load_string_length, 1, r1, r3);
1045 1053
1046 __ ldr(r2, MemOperand(sp)); 1054 __ ldr(r2, MemOperand(sp));
1047 __ ldr(r0, MemOperand(sp, kPointerSize)); // receiver 1055 __ ldr(r0, MemOperand(sp, kPointerSize)); // receiver
1048 1056
1049 __ cmp(r2, Operand(Handle<String>(name))); 1057 __ cmp(r2, Operand(Handle<String>(name)));
1050 __ b(ne, &miss); 1058 __ b(ne, &miss);
1051 1059
1052 GenerateLoadStringLength2(masm(), r0, r1, r3, &miss); 1060 GenerateLoadStringLength2(masm(), r0, r1, r3, &miss);
1053 __ bind(&miss); 1061 __ bind(&miss);
1054 __ DecrementCounter(&Counters::keyed_load_string_length, 1, r1, r3); 1062 __ DecrementCounter(&Counters::keyed_load_string_length, 1, r1, r3);
1055 1063
1056 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1064 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1057 1065
1058 return GetCode(CALLBACKS); 1066 return GetCode(CALLBACKS, name);
1059 } 1067 }
1060 1068
1061 1069
1062 // TODO(1224671): implement the fast case. 1070 // TODO(1224671): implement the fast case.
1063 Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) { 1071 Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
1064 // ----------- S t a t e ------------- 1072 // ----------- S t a t e -------------
1065 // -- lr : return address 1073 // -- lr : return address
1066 // -- sp[0] : key 1074 // -- sp[0] : key
1067 // -- sp[4] : receiver 1075 // -- sp[4] : receiver
1068 // ----------------------------------- 1076 // -----------------------------------
1069 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1077 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1070 1078
1071 return GetCode(CALLBACKS); 1079 return GetCode(CALLBACKS, name);
1072 } 1080 }
1073 1081
1074 1082
1075 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 1083 Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
1076 int index, 1084 int index,
1077 Map* transition, 1085 Map* transition,
1078 String* name) { 1086 String* name) {
1079 // ----------- S t a t e ------------- 1087 // ----------- S t a t e -------------
1080 // -- r0 : value 1088 // -- r0 : value
1081 // -- r2 : name 1089 // -- r2 : name
(...skipping 19 matching lines...) Expand all
1101 r3, r2, r1, 1109 r3, r2, r1,
1102 &miss); 1110 &miss);
1103 __ bind(&miss); 1111 __ bind(&miss);
1104 1112
1105 __ DecrementCounter(&Counters::keyed_store_field, 1, r1, r3); 1113 __ DecrementCounter(&Counters::keyed_store_field, 1, r1, r3);
1106 __ mov(r2, Operand(Handle<String>(name))); // restore name register. 1114 __ mov(r2, Operand(Handle<String>(name))); // restore name register.
1107 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); 1115 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss));
1108 __ Jump(ic, RelocInfo::CODE_TARGET); 1116 __ Jump(ic, RelocInfo::CODE_TARGET);
1109 1117
1110 // Return the generated code. 1118 // Return the generated code.
1111 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION); 1119 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name);
1112 } 1120 }
1113 1121
1114 1122
1115 #undef __ 1123 #undef __
1116 1124
1117 } } // namespace v8::internal 1125 } } // namespace v8::internal
OLDNEW
« src/stub-cache.cc ('K') | « src/stub-cache.cc ('k') | src/stub-cache-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698