| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_IC_STATE_H_ | 5 #ifndef V8_IC_STATE_H_ |
| 6 #define V8_IC_STATE_H_ | 6 #define V8_IC_STATE_H_ |
| 7 | 7 |
| 8 #include "src/macro-assembler.h" | 8 #include "src/macro-assembler.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 private: | 45 private: |
| 46 class ArgcBits : public BitField<int, 0, Code::kArgumentsBits> {}; | 46 class ArgcBits : public BitField<int, 0, Code::kArgumentsBits> {}; |
| 47 class CallTypeBits : public BitField<CallType, Code::kArgumentsBits, 1> {}; | 47 class CallTypeBits : public BitField<CallType, Code::kArgumentsBits, 1> {}; |
| 48 | 48 |
| 49 const int argc_; | 49 const int argc_; |
| 50 const CallType call_type_; | 50 const CallType call_type_; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 | 53 |
| 54 OStream& operator<<(OStream& os, const CallICState& s); | 54 std::ostream& operator<<(std::ostream& os, const CallICState& s); |
| 55 | 55 |
| 56 | 56 |
| 57 // Mode to overwrite BinaryExpression values. | 57 // Mode to overwrite BinaryExpression values. |
| 58 enum OverwriteMode { NO_OVERWRITE, OVERWRITE_LEFT, OVERWRITE_RIGHT }; | 58 enum OverwriteMode { NO_OVERWRITE, OVERWRITE_LEFT, OVERWRITE_RIGHT }; |
| 59 | 59 |
| 60 class BinaryOpICState FINAL BASE_EMBEDDED { | 60 class BinaryOpICState FINAL BASE_EMBEDDED { |
| 61 public: | 61 public: |
| 62 BinaryOpICState(Isolate* isolate, ExtraICState extra_ic_state); | 62 BinaryOpICState(Isolate* isolate, ExtraICState extra_ic_state); |
| 63 | 63 |
| 64 BinaryOpICState(Isolate* isolate, Token::Value op, OverwriteMode mode) | 64 BinaryOpICState(Isolate* isolate, Token::Value op, OverwriteMode mode) |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 132 |
| 133 Type* GetLeftType(Zone* zone) const { return KindToType(left_kind_, zone); } | 133 Type* GetLeftType(Zone* zone) const { return KindToType(left_kind_, zone); } |
| 134 Type* GetRightType(Zone* zone) const { return KindToType(right_kind_, zone); } | 134 Type* GetRightType(Zone* zone) const { return KindToType(right_kind_, zone); } |
| 135 Type* GetResultType(Zone* zone) const; | 135 Type* GetResultType(Zone* zone) const; |
| 136 | 136 |
| 137 void Update(Handle<Object> left, Handle<Object> right, Handle<Object> result); | 137 void Update(Handle<Object> left, Handle<Object> right, Handle<Object> result); |
| 138 | 138 |
| 139 Isolate* isolate() const { return isolate_; } | 139 Isolate* isolate() const { return isolate_; } |
| 140 | 140 |
| 141 private: | 141 private: |
| 142 friend OStream& operator<<(OStream& os, const BinaryOpICState& s); | 142 friend std::ostream& operator<<(std::ostream& os, const BinaryOpICState& s); |
| 143 | 143 |
| 144 enum Kind { NONE, SMI, INT32, NUMBER, STRING, GENERIC }; | 144 enum Kind { NONE, SMI, INT32, NUMBER, STRING, GENERIC }; |
| 145 | 145 |
| 146 Kind UpdateKind(Handle<Object> object, Kind kind) const; | 146 Kind UpdateKind(Handle<Object> object, Kind kind) const; |
| 147 | 147 |
| 148 static const char* KindToString(Kind kind); | 148 static const char* KindToString(Kind kind); |
| 149 static Type* KindToType(Kind kind, Zone* zone); | 149 static Type* KindToType(Kind kind, Zone* zone); |
| 150 static bool KindMaybeSmi(Kind kind) { | 150 static bool KindMaybeSmi(Kind kind) { |
| 151 return (kind >= SMI && kind <= NUMBER) || kind == GENERIC; | 151 return (kind >= SMI && kind <= NUMBER) || kind == GENERIC; |
| 152 } | 152 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 166 Token::Value op_; | 166 Token::Value op_; |
| 167 OverwriteMode mode_; | 167 OverwriteMode mode_; |
| 168 Kind left_kind_; | 168 Kind left_kind_; |
| 169 Kind right_kind_; | 169 Kind right_kind_; |
| 170 Kind result_kind_; | 170 Kind result_kind_; |
| 171 Maybe<int> fixed_right_arg_; | 171 Maybe<int> fixed_right_arg_; |
| 172 Isolate* isolate_; | 172 Isolate* isolate_; |
| 173 }; | 173 }; |
| 174 | 174 |
| 175 | 175 |
| 176 OStream& operator<<(OStream& os, const BinaryOpICState& s); | 176 std::ostream& operator<<(std::ostream& os, const BinaryOpICState& s); |
| 177 | 177 |
| 178 | 178 |
| 179 class CompareICState { | 179 class CompareICState { |
| 180 public: | 180 public: |
| 181 // The type/state lattice is defined by the following inequations: | 181 // The type/state lattice is defined by the following inequations: |
| 182 // UNINITIALIZED < ... | 182 // UNINITIALIZED < ... |
| 183 // ... < GENERIC | 183 // ... < GENERIC |
| 184 // SMI < NUMBER | 184 // SMI < NUMBER |
| 185 // INTERNALIZED_STRING < STRING | 185 // INTERNALIZED_STRING < STRING |
| 186 // KNOWN_OBJECT < OBJECT | 186 // KNOWN_OBJECT < OBJECT |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 private: | 229 private: |
| 230 class ContextualModeBits : public BitField<ContextualMode, 0, 1> {}; | 230 class ContextualModeBits : public BitField<ContextualMode, 0, 1> {}; |
| 231 STATIC_ASSERT(static_cast<int>(NOT_CONTEXTUAL) == 0); | 231 STATIC_ASSERT(static_cast<int>(NOT_CONTEXTUAL) == 0); |
| 232 | 232 |
| 233 const ExtraICState state_; | 233 const ExtraICState state_; |
| 234 }; | 234 }; |
| 235 } | 235 } |
| 236 } | 236 } |
| 237 | 237 |
| 238 #endif // V8_IC_STATE_H_ | 238 #endif // V8_IC_STATE_H_ |
| OLD | NEW |