OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 4923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4934 int length() { return ByteArray::length() / sizeof(T); } | 4934 int length() { return ByteArray::length() / sizeof(T); } |
4935 DECLARE_CAST(PodArray<T>) | 4935 DECLARE_CAST(PodArray<T>) |
4936 | 4936 |
4937 private: | 4937 private: |
4938 DISALLOW_IMPLICIT_CONSTRUCTORS(PodArray<T>); | 4938 DISALLOW_IMPLICIT_CONSTRUCTORS(PodArray<T>); |
4939 }; | 4939 }; |
4940 | 4940 |
4941 // BytecodeArray represents a sequence of interpreter bytecodes. | 4941 // BytecodeArray represents a sequence of interpreter bytecodes. |
4942 class BytecodeArray : public FixedArrayBase { | 4942 class BytecodeArray : public FixedArrayBase { |
4943 public: | 4943 public: |
| 4944 #define DECLARE_BYTECODE_AGE_ENUM(X) k##X##BytecodeAge, |
| 4945 enum Age { |
| 4946 kNoAgeBytecodeAge = 0, |
| 4947 CODE_AGE_LIST(DECLARE_BYTECODE_AGE_ENUM) kAfterLastBytecodeAge, |
| 4948 kFirstBytecodeAge = kNoAgeBytecodeAge, |
| 4949 kLastBytecodeAge = kAfterLastBytecodeAge - 1, |
| 4950 kBytecodeAgeCount = kAfterLastBytecodeAge - kFirstBytecodeAge - 1, |
| 4951 kIsOldBytecodeAge = kSexagenarianBytecodeAge |
| 4952 }; |
| 4953 #undef DECLARE_BYTECODE_AGE_ENUM |
| 4954 |
4944 static int SizeFor(int length) { | 4955 static int SizeFor(int length) { |
4945 return OBJECT_POINTER_ALIGN(kHeaderSize + length); | 4956 return OBJECT_POINTER_ALIGN(kHeaderSize + length); |
4946 } | 4957 } |
4947 | 4958 |
4948 // Setter and getter | 4959 // Setter and getter |
4949 inline byte get(int index); | 4960 inline byte get(int index); |
4950 inline void set(int index, byte value); | 4961 inline void set(int index, byte value); |
4951 | 4962 |
4952 // Returns data start address. | 4963 // Returns data start address. |
4953 inline Address GetFirstBytecodeAddress(); | 4964 inline Address GetFirstBytecodeAddress(); |
(...skipping 10 matching lines...) Expand all Loading... |
4964 inline void set_parameter_count(int number_of_parameters); | 4975 inline void set_parameter_count(int number_of_parameters); |
4965 | 4976 |
4966 // Accessors for profiling count. | 4977 // Accessors for profiling count. |
4967 inline int interrupt_budget() const; | 4978 inline int interrupt_budget() const; |
4968 inline void set_interrupt_budget(int interrupt_budget); | 4979 inline void set_interrupt_budget(int interrupt_budget); |
4969 | 4980 |
4970 // Accessors for OSR loop nesting level. | 4981 // Accessors for OSR loop nesting level. |
4971 inline int osr_loop_nesting_level() const; | 4982 inline int osr_loop_nesting_level() const; |
4972 inline void set_osr_loop_nesting_level(int depth); | 4983 inline void set_osr_loop_nesting_level(int depth); |
4973 | 4984 |
| 4985 // Accessors for bytecode's code age. |
| 4986 inline Age bytecode_age() const; |
| 4987 inline void set_bytecode_age(Age age); |
| 4988 |
4974 // Accessors for the constant pool. | 4989 // Accessors for the constant pool. |
4975 DECL_ACCESSORS(constant_pool, FixedArray) | 4990 DECL_ACCESSORS(constant_pool, FixedArray) |
4976 | 4991 |
4977 // Accessors for handler table containing offsets of exception handlers. | 4992 // Accessors for handler table containing offsets of exception handlers. |
4978 DECL_ACCESSORS(handler_table, FixedArray) | 4993 DECL_ACCESSORS(handler_table, FixedArray) |
4979 | 4994 |
4980 // Accessors for source position table containing mappings between byte code | 4995 // Accessors for source position table containing mappings between byte code |
4981 // offset and source position. | 4996 // offset and source position. |
4982 DECL_ACCESSORS(source_position_table, ByteArray) | 4997 DECL_ACCESSORS(source_position_table, ByteArray) |
4983 | 4998 |
(...skipping 14 matching lines...) Expand all Loading... |
4998 DECLARE_PRINTER(BytecodeArray) | 5013 DECLARE_PRINTER(BytecodeArray) |
4999 DECLARE_VERIFIER(BytecodeArray) | 5014 DECLARE_VERIFIER(BytecodeArray) |
5000 | 5015 |
5001 void Disassemble(std::ostream& os); | 5016 void Disassemble(std::ostream& os); |
5002 | 5017 |
5003 void CopyBytecodesTo(BytecodeArray* to); | 5018 void CopyBytecodesTo(BytecodeArray* to); |
5004 | 5019 |
5005 int LookupRangeInHandlerTable(int code_offset, int* data, | 5020 int LookupRangeInHandlerTable(int code_offset, int* data, |
5006 HandlerTable::CatchPrediction* prediction); | 5021 HandlerTable::CatchPrediction* prediction); |
5007 | 5022 |
| 5023 // Bytecode aging |
| 5024 bool IsOld() const; |
| 5025 void MakeOlder(); |
| 5026 |
5008 // Layout description. | 5027 // Layout description. |
5009 static const int kConstantPoolOffset = FixedArrayBase::kHeaderSize; | 5028 static const int kConstantPoolOffset = FixedArrayBase::kHeaderSize; |
5010 static const int kHandlerTableOffset = kConstantPoolOffset + kPointerSize; | 5029 static const int kHandlerTableOffset = kConstantPoolOffset + kPointerSize; |
5011 static const int kSourcePositionTableOffset = | 5030 static const int kSourcePositionTableOffset = |
5012 kHandlerTableOffset + kPointerSize; | 5031 kHandlerTableOffset + kPointerSize; |
5013 static const int kFrameSizeOffset = kSourcePositionTableOffset + kPointerSize; | 5032 static const int kFrameSizeOffset = kSourcePositionTableOffset + kPointerSize; |
5014 static const int kParameterSizeOffset = kFrameSizeOffset + kIntSize; | 5033 static const int kParameterSizeOffset = kFrameSizeOffset + kIntSize; |
5015 static const int kInterruptBudgetOffset = kParameterSizeOffset + kIntSize; | 5034 static const int kInterruptBudgetOffset = kParameterSizeOffset + kIntSize; |
5016 static const int kOSRNestingLevelOffset = kInterruptBudgetOffset + kIntSize; | 5035 static const int kOSRNestingLevelOffset = kInterruptBudgetOffset + kIntSize; |
5017 static const int kHeaderSize = kOSRNestingLevelOffset + kCharSize; | 5036 static const int kBytecodeAgeOffset = kOSRNestingLevelOffset + kCharSize; |
| 5037 static const int kHeaderSize = kBytecodeAgeOffset + kCharSize; |
5018 | 5038 |
5019 // Maximal memory consumption for a single BytecodeArray. | 5039 // Maximal memory consumption for a single BytecodeArray. |
5020 static const int kMaxSize = 512 * MB; | 5040 static const int kMaxSize = 512 * MB; |
5021 // Maximal length of a single BytecodeArray. | 5041 // Maximal length of a single BytecodeArray. |
5022 static const int kMaxLength = kMaxSize - kHeaderSize; | 5042 static const int kMaxLength = kMaxSize - kHeaderSize; |
5023 | 5043 |
5024 static const int kPointerFieldsBeginOffset = kConstantPoolOffset; | 5044 static const int kPointerFieldsBeginOffset = kConstantPoolOffset; |
5025 static const int kPointerFieldsEndOffset = kFrameSizeOffset; | 5045 static const int kPointerFieldsEndOffset = kFrameSizeOffset; |
5026 | 5046 |
5027 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, | 5047 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, |
(...skipping 6849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11877 } | 11897 } |
11878 return value; | 11898 return value; |
11879 } | 11899 } |
11880 }; | 11900 }; |
11881 | 11901 |
11882 | 11902 |
11883 } // NOLINT, false-positive due to second-order macros. | 11903 } // NOLINT, false-positive due to second-order macros. |
11884 } // NOLINT, false-positive due to second-order macros. | 11904 } // NOLINT, false-positive due to second-order macros. |
11885 | 11905 |
11886 #endif // V8_OBJECTS_H_ | 11906 #endif // V8_OBJECTS_H_ |
OLD | NEW |