Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 3c34be5119f65c385a07df0544f57f5856f0a58f..55d5e9cbca2456b1779450670bde8aca85099ec9 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -3052,7 +3052,8 @@ int Code::major_key() { |
kind() == BINARY_OP_IC || |
kind() == COMPARE_IC || |
kind() == TO_BOOLEAN_IC); |
- return READ_BYTE_FIELD(this, kStubMajorKeyOffset); |
+ return StubMajorKeyField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); |
} |
@@ -3063,7 +3064,9 @@ void Code::set_major_key(int major) { |
kind() == COMPARE_IC || |
kind() == TO_BOOLEAN_IC); |
ASSERT(0 <= major && major < 256); |
- WRITE_BYTE_FIELD(this, kStubMajorKeyOffset, major); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); |
+ int updated = StubMajorKeyField::update(previous, major); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); |
} |
@@ -3165,39 +3168,50 @@ void Code::set_profiler_ticks(int ticks) { |
unsigned Code::stack_slots() { |
ASSERT(kind() == OPTIMIZED_FUNCTION); |
- return READ_UINT32_FIELD(this, kStackSlotsOffset); |
+ return StackSlotsField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_stack_slots(unsigned slots) { |
+ CHECK(slots <= (1 << kStackSlotsBitCount)); |
ASSERT(kind() == OPTIMIZED_FUNCTION); |
- WRITE_UINT32_FIELD(this, kStackSlotsOffset, slots); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = StackSlotsField::update(previous, slots); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
unsigned Code::safepoint_table_offset() { |
ASSERT(kind() == OPTIMIZED_FUNCTION); |
- return READ_UINT32_FIELD(this, kSafepointTableOffsetOffset); |
+ return SafepointTableOffsetField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); |
} |
void Code::set_safepoint_table_offset(unsigned offset) { |
+ CHECK(offset <= (1 << kSafepointTableOffsetBitCount)); |
ASSERT(kind() == OPTIMIZED_FUNCTION); |
ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); |
- WRITE_UINT32_FIELD(this, kSafepointTableOffsetOffset, offset); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); |
+ int updated = SafepointTableOffsetField::update(previous, offset); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); |
} |
unsigned Code::stack_check_table_offset() { |
ASSERT_EQ(FUNCTION, kind()); |
- return READ_UINT32_FIELD(this, kStackCheckTableOffsetOffset); |
+ return StackCheckTableOffsetField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); |
} |
void Code::set_stack_check_table_offset(unsigned offset) { |
ASSERT_EQ(FUNCTION, kind()); |
ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); |
- WRITE_UINT32_FIELD(this, kStackCheckTableOffsetOffset, offset); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); |
+ int updated = StackCheckTableOffsetField::update(previous, offset); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); |
} |
@@ -3216,85 +3230,106 @@ void Code::set_check_type(CheckType value) { |
byte Code::unary_op_type() { |
ASSERT(is_unary_op_stub()); |
- return READ_BYTE_FIELD(this, kUnaryOpTypeOffset); |
+ return UnaryOpTypeField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_unary_op_type(byte value) { |
ASSERT(is_unary_op_stub()); |
- WRITE_BYTE_FIELD(this, kUnaryOpTypeOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = UnaryOpTypeField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
byte Code::binary_op_type() { |
ASSERT(is_binary_op_stub()); |
- return READ_BYTE_FIELD(this, kBinaryOpTypeOffset); |
+ return BinaryOpTypeField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_binary_op_type(byte value) { |
ASSERT(is_binary_op_stub()); |
- WRITE_BYTE_FIELD(this, kBinaryOpTypeOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = BinaryOpTypeField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
byte Code::binary_op_result_type() { |
ASSERT(is_binary_op_stub()); |
- return READ_BYTE_FIELD(this, kBinaryOpReturnTypeOffset); |
+ return BinaryOpResultTypeField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_binary_op_result_type(byte value) { |
ASSERT(is_binary_op_stub()); |
- WRITE_BYTE_FIELD(this, kBinaryOpReturnTypeOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = BinaryOpResultTypeField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
byte Code::compare_state() { |
ASSERT(is_compare_ic_stub()); |
- return READ_BYTE_FIELD(this, kCompareStateOffset); |
+ return CompareStateField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_compare_state(byte value) { |
ASSERT(is_compare_ic_stub()); |
- WRITE_BYTE_FIELD(this, kCompareStateOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = CompareStateField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
byte Code::compare_operation() { |
ASSERT(is_compare_ic_stub()); |
- return READ_BYTE_FIELD(this, kCompareOperationOffset); |
+ return CompareOperationField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_compare_operation(byte value) { |
ASSERT(is_compare_ic_stub()); |
- WRITE_BYTE_FIELD(this, kCompareOperationOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = CompareOperationField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
byte Code::to_boolean_state() { |
ASSERT(is_to_boolean_ic_stub()); |
- return READ_BYTE_FIELD(this, kToBooleanTypeOffset); |
+ return ToBooleanStateField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_to_boolean_state(byte value) { |
ASSERT(is_to_boolean_ic_stub()); |
- WRITE_BYTE_FIELD(this, kToBooleanTypeOffset, value); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = ToBooleanStateField::update(previous, value); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |
bool Code::has_function_cache() { |
ASSERT(kind() == STUB); |
- return READ_BYTE_FIELD(this, kHasFunctionCacheOffset) != 0; |
+ return HasFunctionCacheField::decode( |
+ READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); |
} |
void Code::set_has_function_cache(bool flag) { |
ASSERT(kind() == STUB); |
- WRITE_BYTE_FIELD(this, kHasFunctionCacheOffset, flag); |
+ int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
+ int updated = HasFunctionCacheField::update(previous, flag); |
+ WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
} |