Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Unified Diff: src/ic.cc

Issue 96083005: Remove Reloc::Mode CODE_TARGET_CONTEXT (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Complete for ia32. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/builtins.cc ('K') | « src/ic.h ('k') | src/objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index 33ce188c39c770629b12a372e396deaa1753a9f5..d0c560852dbab1e68942fbb31c78b8072a56dc59 100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -147,6 +147,9 @@ IC::IC(FrameDepth depth, Isolate* isolate)
pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address);
target_ = handle(raw_target(), isolate);
state_ = target_->ic_state();
+ extra_ic_state_ = target_->needs_extended_extra_ic_state(target_->kind())
+ ? target_->extended_extra_ic_state()
+ : target_->extra_ic_state();
}
@@ -254,9 +257,8 @@ bool CallIC::TryUpdateExtraICState(LookupResult* lookup,
argc >= 1 && args[1]->IsNumber()) {
double index = DoubleToInteger(args.number_at(1));
if (index < 0 || index >= string->length()) {
- extra_ic_state_ =
- StringStubState::update(extra_ic_state(),
- STRING_INDEX_OUT_OF_BOUNDS);
+ set_extra_ic_state(StringStubState::update(extra_ic_state(),
+ STRING_INDEX_OUT_OF_BOUNDS));
return true;
}
}
@@ -397,19 +399,6 @@ void IC::UpdateState(Handle<Object> receiver, Handle<Object> name) {
}
-RelocInfo::Mode IC::ComputeMode() {
- Address addr = address();
- Code* code = Code::cast(isolate()->FindCodeObject(addr));
- for (RelocIterator it(code, RelocInfo::kCodeTargetMask);
- !it.done(); it.next()) {
- RelocInfo* info = it.rinfo();
- if (info->pc() == addr) return info->rmode();
- }
- UNREACHABLE();
- return RelocInfo::NONE32;
-}
-
-
Failure* IC::TypeError(const char* type,
Handle<Object> object,
Handle<Object> key) {
@@ -504,11 +493,12 @@ void IC::Clear(Isolate* isolate, Address address) {
void CallICBase::Clear(Address address, Code* target) {
if (IsCleared(target)) return;
- bool contextual = CallICBase::Contextual::decode(target->extra_ic_state());
+ // Is the site contextual or not?
+ ContextualMode mode = IC::GetContextualMode(target->extra_ic_state());
Code* code =
target->GetIsolate()->stub_cache()->FindCallInitialize(
target->arguments_count(),
- contextual ? RelocInfo::CODE_TARGET_CONTEXT : RelocInfo::CODE_TARGET,
+ mode,
target->kind());
SetTargetAtAddress(address, code);
}
@@ -525,7 +515,8 @@ void KeyedLoadIC::Clear(Isolate* isolate, Address address, Code* target) {
void LoadIC::Clear(Isolate* isolate, Address address, Code* target) {
if (IsCleared(target)) return;
- SetTargetAtAddress(address, *pre_monomorphic_stub(isolate));
+ ContextualMode mode = IC::GetContextualMode(target->extra_ic_state());
+ SetTargetAtAddress(address, *pre_monomorphic_stub(isolate, mode));
}
@@ -533,7 +524,8 @@ void StoreIC::Clear(Isolate* isolate, Address address, Code* target) {
if (IsCleared(target)) return;
SetTargetAtAddress(address,
*pre_monomorphic_stub(
- isolate, StoreIC::GetStrictMode(target->extra_ic_state())));
+ isolate, StoreIC::GetStrictMode(target->extra_ic_state()),
+ IC::GetContextualMode(target->extra_ic_state())));
}
« src/builtins.cc ('K') | « src/ic.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698