| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1040 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 virtual Handle<Code> GenerateCode(Isolate* isolate); | 1051 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1052 | 1052 |
| 1053 private: | 1053 private: |
| 1054 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } | 1054 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } |
| 1055 }; | 1055 }; |
| 1056 | 1056 |
| 1057 | 1057 |
| 1058 class KeyedArrayCallStub: public HICStub { | 1058 class KeyedArrayCallStub: public HICStub { |
| 1059 public: | 1059 public: |
| 1060 KeyedArrayCallStub(bool holey, int argc) : HICStub(), argc_(argc) { | 1060 KeyedArrayCallStub(bool holey, int argc) : HICStub(), argc_(argc) { |
| 1061 bit_field_ = ContextualBits::encode(false) | HoleyBits::encode(holey); | 1061 bit_field_ = HoleyBits::encode(holey); |
| 1062 } | 1062 } |
| 1063 | 1063 |
| 1064 virtual Code::Kind kind() const { return Code::KEYED_CALL_IC; } | 1064 virtual Code::Kind kind() const { return Code::KEYED_CALL_IC; } |
| 1065 virtual ExtraICState GetExtraICState() { return bit_field_; } | 1065 virtual ExtraICState GetExtraICState() { return bit_field_; } |
| 1066 | 1066 |
| 1067 ElementsKind elements_kind() { | 1067 ElementsKind elements_kind() { |
| 1068 return HoleyBits::decode(bit_field_) ? FAST_HOLEY_ELEMENTS : FAST_ELEMENTS; | 1068 return HoleyBits::decode(bit_field_) ? FAST_HOLEY_ELEMENTS : FAST_ELEMENTS; |
| 1069 } | 1069 } |
| 1070 | 1070 |
| 1071 int argc() { return argc_; } | 1071 int argc() { return argc_; } |
| 1072 virtual int GetStubFlags() { return argc(); } | 1072 virtual int GetStubFlags() { return argc(); } |
| 1073 | 1073 |
| 1074 static bool IsHoley(Handle<Code> code) { | 1074 static bool IsHoley(Handle<Code> code) { |
| 1075 ExtraICState state = code->extra_ic_state(); | 1075 ExtraICState state = code->extra_ic_state(); |
| 1076 return HoleyBits::decode(state); | 1076 return HoleyBits::decode(state); |
| 1077 } | 1077 } |
| 1078 | 1078 |
| 1079 virtual void InitializeInterfaceDescriptor( | 1079 virtual void InitializeInterfaceDescriptor( |
| 1080 Isolate* isolate, | 1080 Isolate* isolate, |
| 1081 CodeStubInterfaceDescriptor* descriptor); | 1081 CodeStubInterfaceDescriptor* descriptor); |
| 1082 | 1082 |
| 1083 virtual Handle<Code> GenerateCode(Isolate* isolate); | 1083 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1084 | 1084 |
| 1085 private: | 1085 private: |
| 1086 virtual int NotMissMinorKey() { | 1086 virtual int NotMissMinorKey() { |
| 1087 return GetExtraICState() | ArgcBits::encode(argc_); | 1087 return GetExtraICState() | ArgcBits::encode(argc_); |
| 1088 } | 1088 } |
| 1089 | 1089 |
| 1090 class ContextualBits: public BitField<bool, 0, 1> {}; | 1090 // We have to start storing extra ic bits at 1, because calls use bit zero |
| 1091 STATIC_ASSERT(IC::Contextual::kShift == ContextualBits::kShift); | 1091 // for string stub state. |
| 1092 STATIC_ASSERT(IC::Contextual::kSize == ContextualBits::kSize); | 1092 STATIC_ASSERT(CallICBase::StringStubState::kShift == 0); |
| 1093 STATIC_ASSERT(CallICBase::StringStubState::kSize == 1); |
| 1093 class HoleyBits: public BitField<bool, 1, 1> {}; | 1094 class HoleyBits: public BitField<bool, 1, 1> {}; |
| 1094 STATIC_ASSERT(Code::kArgumentsBits <= kStubMinorKeyBits - 2); | 1095 STATIC_ASSERT(Code::kArgumentsBits <= kStubMinorKeyBits - 2); |
| 1095 class ArgcBits: public BitField<int, 2, Code::kArgumentsBits> {}; | 1096 class ArgcBits: public BitField<int, 2, Code::kArgumentsBits> {}; |
| 1096 virtual CodeStub::Major MajorKey() { return KeyedArrayCall; } | 1097 virtual CodeStub::Major MajorKey() { return KeyedArrayCall; } |
| 1097 int bit_field_; | 1098 int bit_field_; |
| 1098 int argc_; | 1099 int argc_; |
| 1099 }; | 1100 }; |
| 1100 | 1101 |
| 1101 | 1102 |
| 1102 class BinaryOpICStub : public HydrogenCodeStub { | 1103 class BinaryOpICStub : public HydrogenCodeStub { |
| (...skipping 1366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2469 | 2470 |
| 2470 | 2471 |
| 2471 class CallDescriptors { | 2472 class CallDescriptors { |
| 2472 public: | 2473 public: |
| 2473 static void InitializeForIsolate(Isolate* isolate); | 2474 static void InitializeForIsolate(Isolate* isolate); |
| 2474 }; | 2475 }; |
| 2475 | 2476 |
| 2476 } } // namespace v8::internal | 2477 } } // namespace v8::internal |
| 2477 | 2478 |
| 2478 #endif // V8_CODE_STUBS_H_ | 2479 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |