| 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();
|
|
|
|
|