| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index c479a14aa07eec86c620b40fdfef1f4229aa35f4..d038408c89e5375adc5760e59f398d364b0b4f77 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -181,6 +181,8 @@ enum SearchMode {
|
| // Instance size sentinel for objects of variable size.
|
| const int kVariableSizeSentinel = 0;
|
|
|
| +const int kStubMajorKeyBits = 6;
|
| +const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
|
|
|
| // All Maps have a field instance_type containing a InstanceType.
|
| // It describes the type of the instances.
|
| @@ -4520,28 +4522,20 @@ class Code: public HeapObject {
|
| static const int kICAgeOffset =
|
| kGCMetadataOffset + kPointerSize;
|
| static const int kFlagsOffset = kICAgeOffset + kIntSize;
|
| - static const int kKindSpecificFlagsOffset = kFlagsOffset + kIntSize;
|
| - static const int kKindSpecificFlagsSize = 2 * kIntSize;
|
| + static const int kKindSpecificFlags1Offset = kFlagsOffset + kIntSize;
|
| + static const int kKindSpecificFlags2Offset =
|
| + kKindSpecificFlags1Offset + kIntSize;
|
|
|
| - static const int kHeaderPaddingStart = kKindSpecificFlagsOffset +
|
| - kKindSpecificFlagsSize;
|
| + static const int kHeaderPaddingStart = kKindSpecificFlags2Offset + kIntSize;
|
|
|
| // Add padding to align the instruction start following right after
|
| // the Code object header.
|
| static const int kHeaderSize =
|
| (kHeaderPaddingStart + kCodeAlignmentMask) & ~kCodeAlignmentMask;
|
|
|
| - // Byte offsets within kKindSpecificFlagsOffset.
|
| - static const int kStubMajorKeyOffset = kKindSpecificFlagsOffset;
|
| - static const int kOptimizableOffset = kKindSpecificFlagsOffset;
|
| - static const int kStackSlotsOffset = kKindSpecificFlagsOffset;
|
| - static const int kCheckTypeOffset = kKindSpecificFlagsOffset;
|
| -
|
| - static const int kUnaryOpTypeOffset = kStubMajorKeyOffset + 1;
|
| - static const int kBinaryOpTypeOffset = kStubMajorKeyOffset + 1;
|
| - static const int kCompareStateOffset = kStubMajorKeyOffset + 1;
|
| - static const int kToBooleanTypeOffset = kStubMajorKeyOffset + 1;
|
| - static const int kHasFunctionCacheOffset = kStubMajorKeyOffset + 1;
|
| + // Byte offsets within kKindSpecificFlags1Offset.
|
| + static const int kOptimizableOffset = kKindSpecificFlags1Offset;
|
| + static const int kCheckTypeOffset = kKindSpecificFlags1Offset;
|
|
|
| static const int kFullCodeFlags = kOptimizableOffset + 1;
|
| class FullCodeFlagsHasDeoptimizationSupportField:
|
| @@ -4549,16 +4543,9 @@ class Code: public HeapObject {
|
| class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1> {};
|
| class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {};
|
|
|
| - static const int kBinaryOpReturnTypeOffset = kBinaryOpTypeOffset + 1;
|
| -
|
| - static const int kCompareOperationOffset = kCompareStateOffset + 1;
|
| -
|
| static const int kAllowOSRAtLoopNestingLevelOffset = kFullCodeFlags + 1;
|
| static const int kProfilerTicksOffset = kAllowOSRAtLoopNestingLevelOffset + 1;
|
|
|
| - static const int kSafepointTableOffsetOffset = kStackSlotsOffset + kIntSize;
|
| - static const int kStackCheckTableOffsetOffset = kStackSlotsOffset + kIntSize;
|
| -
|
| // Flags layout. BitField<type, shift, size>.
|
| class ICStateField: public BitField<InlineCacheState, 0, 3> {};
|
| class TypeField: public BitField<StubType, 3, 3> {};
|
| @@ -4567,6 +4554,77 @@ class Code: public HeapObject {
|
| class ExtraICStateField: public BitField<ExtraICState, 11, 2> {};
|
| class IsPregeneratedField: public BitField<bool, 13, 1> {};
|
|
|
| + // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION)
|
| + static const int kStackSlotsFirstBit = 0;
|
| + static const int kStackSlotsBitCount = 24;
|
| + static const int kUnaryOpTypeFirstBit =
|
| + kStackSlotsFirstBit + kStackSlotsBitCount;
|
| + static const int kUnaryOpTypeBitCount = 3;
|
| + static const int kBinaryOpTypeFirstBit =
|
| + kStackSlotsFirstBit + kStackSlotsBitCount;
|
| + static const int kBinaryOpTypeBitCount = 3;
|
| + static const int kBinaryOpResultTypeFirstBit =
|
| + kBinaryOpTypeFirstBit + kBinaryOpTypeBitCount;
|
| + static const int kBinaryOpResultTypeBitCount = 3;
|
| + static const int kCompareStateFirstBit =
|
| + kStackSlotsFirstBit + kStackSlotsBitCount;
|
| + static const int kCompareStateBitCount = 3;
|
| + static const int kCompareOperationFirstBit =
|
| + kCompareStateFirstBit + kCompareStateBitCount;
|
| + static const int kCompareOperationBitCount = 4;
|
| + static const int kToBooleanStateFirstBit =
|
| + kStackSlotsFirstBit + kStackSlotsBitCount;
|
| + static const int kToBooleanStateBitCount = 8;
|
| + static const int kHasFunctionCacheFirstBit =
|
| + kStackSlotsFirstBit + kStackSlotsBitCount;
|
| + static const int kHasFunctionCacheBitCount = 1;
|
| +
|
| + STATIC_ASSERT(kStackSlotsFirstBit + kStackSlotsBitCount <= 32);
|
| + STATIC_ASSERT(kUnaryOpTypeFirstBit + kUnaryOpTypeBitCount <= 32);
|
| + STATIC_ASSERT(kBinaryOpTypeFirstBit + kBinaryOpTypeBitCount <= 32);
|
| + STATIC_ASSERT(kBinaryOpResultTypeFirstBit +
|
| + kBinaryOpResultTypeBitCount <= 32);
|
| + STATIC_ASSERT(kCompareStateFirstBit + kCompareStateBitCount <= 32);
|
| + STATIC_ASSERT(kCompareOperationFirstBit + kCompareOperationBitCount <= 32);
|
| + STATIC_ASSERT(kToBooleanStateFirstBit + kToBooleanStateBitCount <= 32);
|
| + STATIC_ASSERT(kHasFunctionCacheFirstBit + kHasFunctionCacheBitCount <= 32);
|
| +
|
| + class StackSlotsField: public BitField<int,
|
| + kStackSlotsFirstBit, kStackSlotsBitCount> {}; // NOLINT
|
| + class UnaryOpTypeField: public BitField<int,
|
| + kUnaryOpTypeFirstBit, kUnaryOpTypeBitCount> {}; // NOLINT
|
| + class BinaryOpTypeField: public BitField<int,
|
| + kBinaryOpTypeFirstBit, kBinaryOpTypeBitCount> {}; // NOLINT
|
| + class BinaryOpResultTypeField: public BitField<int,
|
| + kBinaryOpResultTypeFirstBit, kBinaryOpResultTypeBitCount> {}; // NOLINT
|
| + class CompareStateField: public BitField<int,
|
| + kCompareStateFirstBit, kCompareStateBitCount> {}; // NOLINT
|
| + class CompareOperationField: public BitField<int,
|
| + kCompareOperationFirstBit, kCompareOperationBitCount> {}; // NOLINT
|
| + class ToBooleanStateField: public BitField<int,
|
| + kToBooleanStateFirstBit, kToBooleanStateBitCount> {}; // NOLINT
|
| + class HasFunctionCacheField: public BitField<bool,
|
| + kHasFunctionCacheFirstBit, kHasFunctionCacheBitCount> {}; // NOLINT
|
| +
|
| + // KindSpecificFlags2 layout (STUB and OPTIMIZED_FUNCTION)
|
| + static const int kStubMajorKeyFirstBit = 0;
|
| + static const int kSafepointTableOffsetFirstBit =
|
| + kStubMajorKeyFirstBit + kStubMajorKeyBits;
|
| + static const int kSafepointTableOffsetBitCount = 26;
|
| +
|
| + STATIC_ASSERT(kStubMajorKeyFirstBit + kStubMajorKeyBits <= 32);
|
| + STATIC_ASSERT(kSafepointTableOffsetFirstBit +
|
| + kSafepointTableOffsetBitCount <= 32);
|
| +
|
| + class SafepointTableOffsetField: public BitField<int,
|
| + kSafepointTableOffsetFirstBit,
|
| + kSafepointTableOffsetBitCount> {}; // NOLINT
|
| + class StubMajorKeyField: public BitField<int,
|
| + kStubMajorKeyFirstBit, kStubMajorKeyBits> {}; // NOLINT
|
| +
|
| + // KindSpecificFlags2 layout (FUNCTION)
|
| + class StackCheckTableOffsetField: public BitField<int, 0, 31> {};
|
| +
|
| // Signed field cannot be encoded using the BitField class.
|
| static const int kArgumentsCountShift = 14;
|
| static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1);
|
|
|