Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index f938336ba1aa2f95bf6fdbeb1748bbc3504837c6..a8323ffe5aa0f8087be9fbe6b81a8effef08532d 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -150,10 +150,10 @@ |
// levels of the stack frame iteration code. This yields a ~35% speedup when |
// running DeltaBlue and a ~25% speedup of gbemu with the '--nouse-ic' flag. |
const Address entry = Isolate::c_entry_fp(isolate->thread_local_top()); |
- Address* constant_pool = NULL; |
- if (FLAG_enable_embedded_constant_pool) { |
- constant_pool = reinterpret_cast<Address*>( |
- entry + ExitFrameConstants::kConstantPoolOffset); |
+ Address constant_pool = NULL; |
+ if (FLAG_enable_ool_constant_pool) { |
+ constant_pool = |
+ Memory::Address_at(entry + ExitFrameConstants::kConstantPoolOffset); |
} |
Address* pc_address = |
reinterpret_cast<Address*>(entry + ExitFrameConstants::kCallerPCOffset); |
@@ -162,9 +162,9 @@ |
// StubFailureTrampoline, we need to look one frame further down the stack to |
// find the frame pointer and the return address stack slot. |
if (depth == EXTRA_CALL_FRAME) { |
- if (FLAG_enable_embedded_constant_pool) { |
- constant_pool = reinterpret_cast<Address*>( |
- fp + StandardFrameConstants::kConstantPoolOffset); |
+ if (FLAG_enable_ool_constant_pool) { |
+ constant_pool = |
+ Memory::Address_at(fp + StandardFrameConstants::kConstantPoolOffset); |
} |
const int kCallerPCOffset = StandardFrameConstants::kCallerPCOffset; |
pc_address = reinterpret_cast<Address*>(fp + kCallerPCOffset); |
@@ -177,8 +177,10 @@ |
DCHECK(fp == frame->fp() && pc_address == frame->pc_address()); |
#endif |
fp_ = fp; |
- if (FLAG_enable_embedded_constant_pool) { |
- constant_pool_address_ = constant_pool; |
+ if (FLAG_enable_ool_constant_pool) { |
+ raw_constant_pool_ = handle( |
+ ConstantPoolArray::cast(reinterpret_cast<Object*>(constant_pool)), |
+ isolate); |
} |
pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address); |
target_ = handle(raw_target(), isolate); |
@@ -477,7 +479,8 @@ |
} |
-void IC::Clear(Isolate* isolate, Address address, Address constant_pool) { |
+void IC::Clear(Isolate* isolate, Address address, |
+ ConstantPoolArray* constant_pool) { |
Code* target = GetTargetAtAddress(address, constant_pool); |
// Don't clear debug break inline cache as it will remove the break point. |
@@ -540,7 +543,7 @@ |
void StoreIC::Clear(Isolate* isolate, Address address, Code* target, |
- Address constant_pool) { |
+ ConstantPoolArray* constant_pool) { |
if (IsCleared(target)) return; |
Code* code = PropertyICCompiler::FindPreMonomorphic(isolate, Code::STORE_IC, |
target->extra_ic_state()); |
@@ -549,7 +552,7 @@ |
void KeyedStoreIC::Clear(Isolate* isolate, Address address, Code* target, |
- Address constant_pool) { |
+ ConstantPoolArray* constant_pool) { |
if (IsCleared(target)) return; |
Handle<Code> code = pre_monomorphic_stub( |
isolate, StoreICState::GetLanguageMode(target->extra_ic_state())); |
@@ -558,7 +561,7 @@ |
void CompareIC::Clear(Isolate* isolate, Address address, Code* target, |
- Address constant_pool) { |
+ ConstantPoolArray* constant_pool) { |
DCHECK(CodeStub::GetMajorKey(target) == CodeStub::CompareIC); |
CompareICStub stub(target->stub_key(), isolate); |
// Only clear CompareICs that can retain objects. |
@@ -2602,7 +2605,8 @@ |
} |
-void CompareNilIC::Clear(Address address, Code* target, Address constant_pool) { |
+void CompareNilIC::Clear(Address address, Code* target, |
+ ConstantPoolArray* constant_pool) { |
if (IsCleared(target)) return; |
ExtraICState state = target->extra_ic_state(); |