OLD | NEW |
---|---|
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
59 V(RevertToNumber) \ | 59 V(RevertToNumber) \ |
60 V(ToBoolean) \ | 60 V(ToBoolean) \ |
61 V(ToNumber) \ | 61 V(ToNumber) \ |
62 V(CounterOp) \ | 62 V(CounterOp) \ |
63 V(ArgumentsAccess) \ | 63 V(ArgumentsAccess) \ |
64 V(RegExpExec) \ | 64 V(RegExpExec) \ |
65 V(RegExpConstructResult) \ | 65 V(RegExpConstructResult) \ |
66 V(NumberToString) \ | 66 V(NumberToString) \ |
67 V(CEntry) \ | 67 V(CEntry) \ |
68 V(JSEntry) \ | 68 V(JSEntry) \ |
69 V(ObjectKeyedLoad) \ | |
70 V(JSArrayKeyedLoad) \ | |
71 V(ObjectKeyedStore) \ | |
72 V(JSArrayKeyedStore) \ | |
73 V(ExternalByteArrayLoad) \ | |
74 V(ExternalUnsignedByteArrayLoad) \ | |
75 V(ExternalShortArrayLoad) \ | |
76 V(ExternalUnsignedShortArrayLoad) \ | |
77 V(ExternalIntArrayLoad) \ | |
78 V(ExternalUnsignedIntArrayLoad) \ | |
79 V(ExternalFloatArrayLoad) \ | |
80 V(ExternalDoubleArrayLoad) \ | |
81 V(ExternalPixelArrayLoad) \ | |
82 V(ExternalByteArrayStore) \ | |
83 V(ExternalUnsignedByteArrayStore) \ | |
84 V(ExternalShortArrayStore) \ | |
85 V(ExternalUnsignedShortArrayStore) \ | |
86 V(ExternalIntArrayStore) \ | |
87 V(ExternalUnsignedIntArrayStore) \ | |
88 V(ExternalFloatArrayStore) \ | |
89 V(ExternalDoubleArrayStore) \ | |
90 V(ExternalPixelArrayStore) \ | |
69 V(DebuggerStatement) \ | 91 V(DebuggerStatement) \ |
70 V(StringDictionaryNegativeLookup) | 92 V(StringDictionaryNegativeLookup) |
71 | 93 |
72 // List of code stubs only used on ARM platforms. | 94 // List of code stubs only used on ARM platforms. |
73 #ifdef V8_TARGET_ARCH_ARM | 95 #ifdef V8_TARGET_ARCH_ARM |
74 #define CODE_STUB_LIST_ARM(V) \ | 96 #define CODE_STUB_LIST_ARM(V) \ |
75 V(GetProperty) \ | 97 V(GetProperty) \ |
76 V(SetProperty) \ | 98 V(SetProperty) \ |
77 V(InvokeBuiltin) \ | 99 V(InvokeBuiltin) \ |
78 V(RegExpCEntry) \ | 100 V(RegExpCEntry) \ |
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
914 masm_->set_allow_stub_calls(previous_allow_); | 936 masm_->set_allow_stub_calls(previous_allow_); |
915 } | 937 } |
916 | 938 |
917 private: | 939 private: |
918 MacroAssembler* masm_; | 940 MacroAssembler* masm_; |
919 bool previous_allow_; | 941 bool previous_allow_; |
920 | 942 |
921 DISALLOW_COPY_AND_ASSIGN(AllowStubCallsScope); | 943 DISALLOW_COPY_AND_ASSIGN(AllowStubCallsScope); |
922 }; | 944 }; |
923 | 945 |
946 #ifdef DEBUG | |
947 #define DECLARE_ARRAY_STUB_PRINT(name) void Print() { PrintF(#name); } | |
948 #else | |
949 #define DECLARE_ARRAY_STUB_PRINT(name) | |
950 #endif | |
951 | |
952 | |
953 class KeyedLoadStub : public CodeStub { | |
954 public: | |
955 explicit KeyedLoadStub(bool is_js_array) | |
956 : is_js_array_(is_js_array) { | |
957 } | |
958 | |
959 void Generate(MacroAssembler* masm); | |
960 private: | |
961 bool is_js_array_; | |
962 }; | |
963 | |
964 | |
965 class ObjectKeyedLoadStub: public KeyedLoadStub { | |
966 public: | |
967 ObjectKeyedLoadStub() : KeyedLoadStub(false) { } | |
968 | |
969 private: | |
970 Major MajorKey() { return ObjectKeyedLoad; } | |
971 int MinorKey() { return 0; } | |
972 | |
973 const char* GetName() { return "ObjectKeyedLoadStub"; } | |
974 | |
975 DECLARE_ARRAY_STUB_PRINT(ObjectKeyedLoadStub) | |
976 }; | |
977 | |
978 | |
979 class JSArrayKeyedLoadStub: public KeyedLoadStub { | |
980 public: | |
981 JSArrayKeyedLoadStub() : KeyedLoadStub(true) { } | |
982 | |
983 private: | |
984 Major MajorKey() { return JSArrayKeyedLoad; } | |
985 int MinorKey() { return 0; } | |
986 | |
987 const char* GetName() { return "JSArrayKeyedLoadStub"; } | |
988 | |
989 DECLARE_ARRAY_STUB_PRINT(JSArrayKeyedLoadStub) | |
990 }; | |
991 | |
992 | |
993 class KeyedStoreStub : public CodeStub { | |
Mads Ager (chromium)
2011/05/10 13:38:06
Why not just have this one and have a minor key fo
danno
2011/05/11 14:20:19
Yes, that's a really good idea. Should have though
| |
994 public: | |
995 explicit KeyedStoreStub(bool is_js_array) | |
996 : is_js_array_(is_js_array) { } | |
997 | |
998 void Generate(MacroAssembler* masm); | |
999 private: | |
1000 bool is_js_array_; | |
1001 }; | |
1002 | |
1003 | |
1004 class ObjectKeyedStoreStub: public KeyedStoreStub { | |
1005 public: | |
1006 ObjectKeyedStoreStub() : KeyedStoreStub(false) { } | |
1007 | |
1008 private: | |
1009 Major MajorKey() { return ObjectKeyedStore; } | |
1010 int MinorKey() { return 0; } | |
1011 | |
1012 const char* GetName() { return "ObjectKeyedStoreStub"; } | |
1013 | |
1014 DECLARE_ARRAY_STUB_PRINT(ObjectKeyedStoreStub) | |
1015 }; | |
1016 | |
1017 | |
1018 class JSArrayKeyedStoreStub: public KeyedStoreStub { | |
1019 public: | |
1020 JSArrayKeyedStoreStub() : KeyedStoreStub(true) { } | |
1021 | |
1022 private: | |
1023 Major MajorKey() { return JSArrayKeyedStore; } | |
1024 int MinorKey() { return 0; } | |
1025 | |
1026 const char* GetName() { return "JSArrayKeyedStoreStub"; } | |
1027 | |
1028 DECLARE_ARRAY_STUB_PRINT(JSArrayKeyedStoreStub) | |
1029 }; | |
1030 | |
1031 | |
1032 class ExternalArrayStub : public CodeStub { | |
1033 public: | |
1034 explicit ExternalArrayStub(ExternalArrayType array_type) | |
1035 : array_type_(array_type) { } | |
1036 | |
1037 Major MajorKey() { | |
Mads Ager (chromium)
2011/05/10 13:38:06
Just don't implement Major and Minor key?
danno
2011/05/11 14:20:19
Done.
| |
1038 UNREACHABLE(); | |
1039 return static_cast<Major>(0); | |
1040 } | |
1041 int MinorKey() { | |
1042 UNREACHABLE(); | |
1043 return 0; | |
1044 } | |
1045 | |
1046 protected: | |
1047 ExternalArrayType array_type_; | |
1048 }; | |
1049 | |
1050 | |
1051 class ExternalArrayLoadStub : public ExternalArrayStub { | |
1052 public: | |
1053 explicit ExternalArrayLoadStub(ExternalArrayType array_type) | |
1054 : ExternalArrayStub(array_type) { } | |
1055 | |
1056 void Generate(MacroAssembler* masm); | |
1057 }; | |
1058 | |
1059 | |
1060 class ExternalArrayStoreStub : public ExternalArrayStub { | |
1061 public: | |
1062 explicit ExternalArrayStoreStub(ExternalArrayType array_type) | |
1063 : ExternalArrayStub(array_type) { } | |
1064 | |
1065 void Generate(MacroAssembler* masm); | |
1066 }; | |
1067 | |
1068 | |
1069 #define DECLARE_EXTERNAL_ARRAY_STUB(op, type) \ | |
Mads Ager (chromium)
2011/05/10 13:38:06
Do you really need all of these different types he
danno
2011/05/11 14:20:19
Done.
| |
1070 class External##type##Array##op##Stub : public ExternalArray##op##Stub {\ | |
1071 public: \ | |
1072 External##type##Array##op##Stub() \ | |
1073 : ExternalArray##op##Stub(k##External##type##Array) { } \ | |
1074 \ | |
1075 private: \ | |
1076 Major MajorKey() { return External##type##Array##op; } \ | |
1077 int MinorKey() { return 0; } \ | |
1078 \ | |
1079 const char* GetName() { return "External" #type "Array" #op; } \ | |
1080 \ | |
1081 DECLARE_ARRAY_STUB_PRINT(External##type##Array##op##Stub) \ | |
1082 } | |
1083 | |
1084 | |
1085 DECLARE_EXTERNAL_ARRAY_STUB(Load, Byte); | |
1086 DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedByte); | |
1087 DECLARE_EXTERNAL_ARRAY_STUB(Load, Short); | |
1088 DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedShort); | |
1089 DECLARE_EXTERNAL_ARRAY_STUB(Load, Int); | |
1090 DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedInt); | |
1091 DECLARE_EXTERNAL_ARRAY_STUB(Load, Float); | |
1092 DECLARE_EXTERNAL_ARRAY_STUB(Load, Double); | |
1093 DECLARE_EXTERNAL_ARRAY_STUB(Load, Pixel); | |
1094 | |
1095 DECLARE_EXTERNAL_ARRAY_STUB(Store, Byte); | |
1096 DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedByte); | |
1097 DECLARE_EXTERNAL_ARRAY_STUB(Store, Short); | |
1098 DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedShort); | |
1099 DECLARE_EXTERNAL_ARRAY_STUB(Store, Int); | |
1100 DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedInt); | |
1101 DECLARE_EXTERNAL_ARRAY_STUB(Store, Float); | |
1102 DECLARE_EXTERNAL_ARRAY_STUB(Store, Double); | |
1103 DECLARE_EXTERNAL_ARRAY_STUB(Store, Pixel); | |
1104 | |
1105 | |
924 } } // namespace v8::internal | 1106 } } // namespace v8::internal |
925 | 1107 |
926 #endif // V8_CODE_STUBS_H_ | 1108 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |