| 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 4181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4192 TO_BOOLEAN_IC, | 4192 TO_BOOLEAN_IC, |
| 4193 // No more than 16 kinds. The value currently encoded in four bits in | 4193 // No more than 16 kinds. The value currently encoded in four bits in |
| 4194 // Flags. | 4194 // Flags. |
| 4195 | 4195 |
| 4196 // Pseudo-kinds. | 4196 // Pseudo-kinds. |
| 4197 REGEXP = BUILTIN, | 4197 REGEXP = BUILTIN, |
| 4198 FIRST_IC_KIND = LOAD_IC, | 4198 FIRST_IC_KIND = LOAD_IC, |
| 4199 LAST_IC_KIND = TO_BOOLEAN_IC | 4199 LAST_IC_KIND = TO_BOOLEAN_IC |
| 4200 }; | 4200 }; |
| 4201 | 4201 |
| 4202 // Types of stubs. |
| 4203 enum StubType { |
| 4204 NORMAL, |
| 4205 FIELD, |
| 4206 CONSTANT_FUNCTION, |
| 4207 CALLBACKS, |
| 4208 INTERCEPTOR, |
| 4209 MAP_TRANSITION, |
| 4210 NONEXISTENT |
| 4211 }; |
| 4212 |
| 4202 enum { | 4213 enum { |
| 4203 NUMBER_OF_KINDS = LAST_IC_KIND + 1 | 4214 NUMBER_OF_KINDS = LAST_IC_KIND + 1 |
| 4204 }; | 4215 }; |
| 4205 | 4216 |
| 4206 typedef int ExtraICState; | 4217 typedef int ExtraICState; |
| 4207 | 4218 |
| 4208 static const ExtraICState kNoExtraICState = 0; | 4219 static const ExtraICState kNoExtraICState = 0; |
| 4209 | 4220 |
| 4210 #ifdef ENABLE_DISASSEMBLER | 4221 #ifdef ENABLE_DISASSEMBLER |
| 4211 // Printing | 4222 // Printing |
| 4212 static const char* Kind2String(Kind kind); | 4223 static const char* Kind2String(Kind kind); |
| 4213 static const char* ICState2String(InlineCacheState state); | 4224 static const char* ICState2String(InlineCacheState state); |
| 4214 static const char* PropertyType2String(PropertyType type); | 4225 static const char* StubType2String(StubType type); |
| 4215 static void PrintExtraICState(FILE* out, Kind kind, ExtraICState extra); | 4226 static void PrintExtraICState(FILE* out, Kind kind, ExtraICState extra); |
| 4216 inline void Disassemble(const char* name) { | 4227 inline void Disassemble(const char* name) { |
| 4217 Disassemble(name, stdout); | 4228 Disassemble(name, stdout); |
| 4218 } | 4229 } |
| 4219 void Disassemble(const char* name, FILE* out); | 4230 void Disassemble(const char* name, FILE* out); |
| 4220 #endif // ENABLE_DISASSEMBLER | 4231 #endif // ENABLE_DISASSEMBLER |
| 4221 | 4232 |
| 4222 // [instruction_size]: Size of the native instructions | 4233 // [instruction_size]: Size of the native instructions |
| 4223 inline int instruction_size(); | 4234 inline int instruction_size(); |
| 4224 inline void set_instruction_size(int value); | 4235 inline void set_instruction_size(int value); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 4254 inline int relocation_size(); | 4265 inline int relocation_size(); |
| 4255 | 4266 |
| 4256 // [flags]: Various code flags. | 4267 // [flags]: Various code flags. |
| 4257 inline Flags flags(); | 4268 inline Flags flags(); |
| 4258 inline void set_flags(Flags flags); | 4269 inline void set_flags(Flags flags); |
| 4259 | 4270 |
| 4260 // [flags]: Access to specific code flags. | 4271 // [flags]: Access to specific code flags. |
| 4261 inline Kind kind(); | 4272 inline Kind kind(); |
| 4262 inline InlineCacheState ic_state(); // Only valid for IC stubs. | 4273 inline InlineCacheState ic_state(); // Only valid for IC stubs. |
| 4263 inline ExtraICState extra_ic_state(); // Only valid for IC stubs. | 4274 inline ExtraICState extra_ic_state(); // Only valid for IC stubs. |
| 4264 inline PropertyType type(); // Only valid for monomorphic IC stubs. | 4275 inline StubType type(); // Only valid for monomorphic IC stubs. |
| 4265 inline int arguments_count(); // Only valid for call IC stubs. | 4276 inline int arguments_count(); // Only valid for call IC stubs. |
| 4266 | 4277 |
| 4267 // Testers for IC stub kinds. | 4278 // Testers for IC stub kinds. |
| 4268 inline bool is_inline_cache_stub(); | 4279 inline bool is_inline_cache_stub(); |
| 4269 inline bool is_load_stub() { return kind() == LOAD_IC; } | 4280 inline bool is_load_stub() { return kind() == LOAD_IC; } |
| 4270 inline bool is_keyed_load_stub() { return kind() == KEYED_LOAD_IC; } | 4281 inline bool is_keyed_load_stub() { return kind() == KEYED_LOAD_IC; } |
| 4271 inline bool is_store_stub() { return kind() == STORE_IC; } | 4282 inline bool is_store_stub() { return kind() == STORE_IC; } |
| 4272 inline bool is_keyed_store_stub() { return kind() == KEYED_STORE_IC; } | 4283 inline bool is_keyed_store_stub() { return kind() == KEYED_STORE_IC; } |
| 4273 inline bool is_call_stub() { return kind() == CALL_IC; } | 4284 inline bool is_call_stub() { return kind() == CALL_IC; } |
| 4274 inline bool is_keyed_call_stub() { return kind() == KEYED_CALL_IC; } | 4285 inline bool is_keyed_call_stub() { return kind() == KEYED_CALL_IC; } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4397 StrictModeFlag strict_mode) { | 4408 StrictModeFlag strict_mode) { |
| 4398 return ExtraICStateKeyedAccessGrowMode::encode(grow_mode) | | 4409 return ExtraICStateKeyedAccessGrowMode::encode(grow_mode) | |
| 4399 ExtraICStateStrictMode::encode(strict_mode); | 4410 ExtraICStateStrictMode::encode(strict_mode); |
| 4400 } | 4411 } |
| 4401 | 4412 |
| 4402 // Flags operations. | 4413 // Flags operations. |
| 4403 static inline Flags ComputeFlags( | 4414 static inline Flags ComputeFlags( |
| 4404 Kind kind, | 4415 Kind kind, |
| 4405 InlineCacheState ic_state = UNINITIALIZED, | 4416 InlineCacheState ic_state = UNINITIALIZED, |
| 4406 ExtraICState extra_ic_state = kNoExtraICState, | 4417 ExtraICState extra_ic_state = kNoExtraICState, |
| 4407 PropertyType type = NORMAL, | 4418 StubType type = NORMAL, |
| 4408 int argc = -1, | 4419 int argc = -1, |
| 4409 InlineCacheHolderFlag holder = OWN_MAP); | 4420 InlineCacheHolderFlag holder = OWN_MAP); |
| 4410 | 4421 |
| 4411 static inline Flags ComputeMonomorphicFlags( | 4422 static inline Flags ComputeMonomorphicFlags( |
| 4412 Kind kind, | 4423 Kind kind, |
| 4413 PropertyType type, | 4424 StubType type, |
| 4414 ExtraICState extra_ic_state = kNoExtraICState, | 4425 ExtraICState extra_ic_state = kNoExtraICState, |
| 4415 InlineCacheHolderFlag holder = OWN_MAP, | 4426 InlineCacheHolderFlag holder = OWN_MAP, |
| 4416 int argc = -1); | 4427 int argc = -1); |
| 4417 | 4428 |
| 4418 static inline InlineCacheState ExtractICStateFromFlags(Flags flags); | 4429 static inline InlineCacheState ExtractICStateFromFlags(Flags flags); |
| 4419 static inline PropertyType ExtractTypeFromFlags(Flags flags); | 4430 static inline StubType ExtractTypeFromFlags(Flags flags); |
| 4420 static inline Kind ExtractKindFromFlags(Flags flags); | 4431 static inline Kind ExtractKindFromFlags(Flags flags); |
| 4421 static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags); | 4432 static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags); |
| 4422 static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags); | 4433 static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags); |
| 4423 static inline int ExtractArgumentsCountFromFlags(Flags flags); | 4434 static inline int ExtractArgumentsCountFromFlags(Flags flags); |
| 4424 | 4435 |
| 4425 static inline Flags RemoveTypeFromFlags(Flags flags); | 4436 static inline Flags RemoveTypeFromFlags(Flags flags); |
| 4426 | 4437 |
| 4427 // Convert a target address into a code object. | 4438 // Convert a target address into a code object. |
| 4428 static inline Code* GetCodeFromTargetAddress(Address address); | 4439 static inline Code* GetCodeFromTargetAddress(Address address); |
| 4429 | 4440 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4545 static const int kCompareOperationOffset = kCompareStateOffset + 1; | 4556 static const int kCompareOperationOffset = kCompareStateOffset + 1; |
| 4546 | 4557 |
| 4547 static const int kAllowOSRAtLoopNestingLevelOffset = kFullCodeFlags + 1; | 4558 static const int kAllowOSRAtLoopNestingLevelOffset = kFullCodeFlags + 1; |
| 4548 static const int kProfilerTicksOffset = kAllowOSRAtLoopNestingLevelOffset + 1; | 4559 static const int kProfilerTicksOffset = kAllowOSRAtLoopNestingLevelOffset + 1; |
| 4549 | 4560 |
| 4550 static const int kSafepointTableOffsetOffset = kStackSlotsOffset + kIntSize; | 4561 static const int kSafepointTableOffsetOffset = kStackSlotsOffset + kIntSize; |
| 4551 static const int kStackCheckTableOffsetOffset = kStackSlotsOffset + kIntSize; | 4562 static const int kStackCheckTableOffsetOffset = kStackSlotsOffset + kIntSize; |
| 4552 | 4563 |
| 4553 // Flags layout. BitField<type, shift, size>. | 4564 // Flags layout. BitField<type, shift, size>. |
| 4554 class ICStateField: public BitField<InlineCacheState, 0, 3> {}; | 4565 class ICStateField: public BitField<InlineCacheState, 0, 3> {}; |
| 4555 class TypeField: public BitField<PropertyType, 3, 4> {}; | 4566 class TypeField: public BitField<StubType, 3, 3> {}; |
| 4556 class CacheHolderField: public BitField<InlineCacheHolderFlag, 7, 1> {}; | 4567 class CacheHolderField: public BitField<InlineCacheHolderFlag, 6, 1> {}; |
| 4557 class KindField: public BitField<Kind, 8, 4> {}; | 4568 class KindField: public BitField<Kind, 7, 4> {}; |
| 4558 class ExtraICStateField: public BitField<ExtraICState, 12, 2> {}; | 4569 class ExtraICStateField: public BitField<ExtraICState, 11, 2> {}; |
| 4559 class IsPregeneratedField: public BitField<bool, 14, 1> {}; | 4570 class IsPregeneratedField: public BitField<bool, 13, 1> {}; |
| 4560 | 4571 |
| 4561 // Signed field cannot be encoded using the BitField class. | 4572 // Signed field cannot be encoded using the BitField class. |
| 4562 static const int kArgumentsCountShift = 15; | 4573 static const int kArgumentsCountShift = 14; |
| 4563 static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1); | 4574 static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1); |
| 4564 | 4575 |
| 4565 // This constant should be encodable in an ARM instruction. | 4576 // This constant should be encodable in an ARM instruction. |
| 4566 static const int kFlagsNotUsedInLookup = | 4577 static const int kFlagsNotUsedInLookup = |
| 4567 TypeField::kMask | CacheHolderField::kMask; | 4578 TypeField::kMask | CacheHolderField::kMask; |
| 4568 | 4579 |
| 4569 private: | 4580 private: |
| 4570 DISALLOW_IMPLICIT_CONSTRUCTORS(Code); | 4581 DISALLOW_IMPLICIT_CONSTRUCTORS(Code); |
| 4571 }; | 4582 }; |
| 4572 | 4583 |
| (...skipping 4220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8793 } else { | 8804 } else { |
| 8794 value &= ~(1 << bit_position); | 8805 value &= ~(1 << bit_position); |
| 8795 } | 8806 } |
| 8796 return value; | 8807 return value; |
| 8797 } | 8808 } |
| 8798 }; | 8809 }; |
| 8799 | 8810 |
| 8800 } } // namespace v8::internal | 8811 } } // namespace v8::internal |
| 8801 | 8812 |
| 8802 #endif // V8_OBJECTS_H_ | 8813 #endif // V8_OBJECTS_H_ |
| OLD | NEW |