Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 10fa80394e285798d9608a69cd42fc7b8a093949..dff014e32168d2f041303538a644fe84cc75f441 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -4621,6 +4621,15 @@ Code::Kind Code::kind() { |
} |
+bool Code::IsCodeStubOrIC() { |
+ return kind() == STUB || kind() == HANDLER || kind() == LOAD_IC || |
+ kind() == KEYED_LOAD_IC || kind() == CALL_IC || kind() == STORE_IC || |
+ kind() == KEYED_STORE_IC || kind() == BINARY_OP_IC || |
+ kind() == COMPARE_IC || kind() == COMPARE_NIL_IC || |
+ kind() == TO_BOOLEAN_IC; |
+} |
+ |
+ |
InlineCacheState Code::ic_state() { |
InlineCacheState result = ExtractICStateFromFlags(flags()); |
// Only allow uninitialized or debugger states for non-IC code |
@@ -4673,37 +4682,6 @@ inline void Code::set_is_crankshafted(bool value) { |
} |
-int Code::major_key() { |
- ASSERT(has_major_key()); |
- return StubMajorKeyField::decode( |
- READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); |
-} |
- |
- |
-void Code::set_major_key(int major) { |
- ASSERT(has_major_key()); |
- ASSERT(0 <= major && major < 256); |
- int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); |
- int updated = StubMajorKeyField::update(previous, major); |
- WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); |
-} |
- |
- |
-bool Code::has_major_key() { |
- return kind() == STUB || |
- kind() == HANDLER || |
- kind() == BINARY_OP_IC || |
- kind() == COMPARE_IC || |
- kind() == COMPARE_NIL_IC || |
- kind() == LOAD_IC || |
- kind() == KEYED_LOAD_IC || |
- kind() == STORE_IC || |
- kind() == CALL_IC || |
- kind() == KEYED_STORE_IC || |
- kind() == TO_BOOLEAN_IC; |
-} |
- |
- |
bool Code::optimizable() { |
ASSERT_EQ(FUNCTION, kind()); |
return READ_BYTE_FIELD(this, kOptimizableOffset) == 1; |
@@ -6129,7 +6107,7 @@ void Code::WipeOutHeader() { |
WRITE_FIELD(this, kHandlerTableOffset, NULL); |
WRITE_FIELD(this, kDeoptimizationDataOffset, NULL); |
WRITE_FIELD(this, kConstantPoolOffset, NULL); |
- // Do not wipe out e.g. a minor key. |
+ // Do not wipe out major/minor keys on a code stub or IC |
if (!READ_FIELD(this, kTypeFeedbackInfoOffset)->IsSmi()) { |
WRITE_FIELD(this, kTypeFeedbackInfoOffset, NULL); |
} |
@@ -6150,24 +6128,15 @@ void Code::set_type_feedback_info(Object* value, WriteBarrierMode mode) { |
} |
-int Code::stub_info() { |
- ASSERT(kind() == COMPARE_IC || kind() == COMPARE_NIL_IC || |
- kind() == BINARY_OP_IC || kind() == LOAD_IC || kind() == CALL_IC); |
- return Smi::cast(raw_type_feedback_info())->value(); |
+uint32_t Code::stub_key() { |
+ ASSERT(IsCodeStubOrIC()); |
+ return Smi::cast(raw_type_feedback_info())->value() - Smi::kMinValue; |
} |
-void Code::set_stub_info(int value) { |
- ASSERT(kind() == COMPARE_IC || |
- kind() == COMPARE_NIL_IC || |
- kind() == BINARY_OP_IC || |
- kind() == STUB || |
- kind() == LOAD_IC || |
- kind() == CALL_IC || |
- kind() == KEYED_LOAD_IC || |
- kind() == STORE_IC || |
- kind() == KEYED_STORE_IC); |
- set_raw_type_feedback_info(Smi::FromInt(value)); |
+void Code::set_stub_key(uint32_t key) { |
+ ASSERT(IsCodeStubOrIC()); |
+ set_raw_type_feedback_info(Smi::FromInt(key + Smi::kMinValue)); |
} |