Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/ic/ic.h b/src/ic/ic.h
index 5dae179..8d45eab 100644
--- a/src/ic/ic.h
+++ b/src/ic/ic.h
@@ -47,7 +47,8 @@
#ifdef DEBUG
bool IsLoadStub() const {
- return kind_ == Code::LOAD_IC || kind_ == Code::KEYED_LOAD_IC;
+ return kind_ == Code::LOAD_IC || kind_ == Code::LOAD_GLOBAL_IC ||
+ kind_ == Code::KEYED_LOAD_IC;
}
bool IsStoreStub() const {
return kind_ == Code::STORE_IC || kind_ == Code::KEYED_STORE_IC;
@@ -63,22 +64,19 @@
Isolate* isolate,
CacheHolderFlag* flag);
- static bool IsCleared(Code* code) {
- InlineCacheState state = code->ic_state();
- return !FLAG_use_ic || state == UNINITIALIZED || state == PREMONOMORPHIC;
- }
-
static bool IsCleared(FeedbackNexus* nexus) {
InlineCacheState state = nexus->StateFromFeedback();
return !FLAG_use_ic || state == UNINITIALIZED || state == PREMONOMORPHIC;
}
static bool ICUseVector(Code::Kind kind) {
- return kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC ||
- kind == Code::CALL_IC || kind == Code::STORE_IC ||
- kind == Code::KEYED_STORE_IC;
+ return kind == Code::LOAD_IC || kind == Code::LOAD_GLOBAL_IC ||
+ kind == Code::KEYED_LOAD_IC || kind == Code::CALL_IC ||
+ kind == Code::STORE_IC || kind == Code::KEYED_STORE_IC;
}
+ static InlineCacheState StateFromCode(Code* code);
+
protected:
Address fp() const { return fp_; }
Address pc() const { return *pc_address_; }
@@ -271,18 +269,16 @@
class LoadIC : public IC {
public:
- TypeofMode typeof_mode() const {
- return LoadICState::GetTypeofMode(extra_ic_state());
- }
-
LoadIC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus = NULL)
: IC(depth, isolate, nexus) {
DCHECK(nexus != NULL);
DCHECK(IsLoadStub());
}
- bool ShouldThrowReferenceError(Handle<Object> receiver) {
- return receiver->IsJSGlobalObject() && typeof_mode() == NOT_INSIDE_TYPEOF;
+ bool ShouldThrowReferenceError() const {
+ return kind() == Code::LOAD_GLOBAL_IC &&
+ LoadGlobalICState::GetTypeofMode(extra_ic_state()) ==
+ NOT_INSIDE_TYPEOF;
}
// Code generator routines.
@@ -291,8 +287,7 @@
static void GenerateRuntimeGetProperty(MacroAssembler* masm);
static void GenerateNormal(MacroAssembler* masm);
- static Handle<Code> initialize_stub_in_optimized_code(
- Isolate* isolate, ExtraICState extra_state, State initialization_state);
+ static Handle<Code> initialize_stub_in_optimized_code(Isolate* isolate);
MUST_USE_RESULT MaybeHandle<Object> Load(Handle<Object> object,
Handle<Name> name);
@@ -300,7 +295,7 @@
static void Clear(Isolate* isolate, Code* host, LoadICNexus* nexus);
protected:
- Handle<Code> slow_stub() const {
+ virtual Handle<Code> slow_stub() const {
return isolate()->builtins()->LoadIC_Slow();
}
@@ -319,6 +314,23 @@
friend class IC;
};
+class LoadGlobalIC : public LoadIC {
+ public:
+ LoadGlobalIC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus = NULL)
+ : LoadIC(depth, isolate, nexus) {}
+
+ static Handle<Code> initialize_stub_in_optimized_code(
+ Isolate* isolate, ExtraICState extra_state);
+
+ MUST_USE_RESULT MaybeHandle<Object> Load(Handle<Name> name);
+
+ static void Clear(Isolate* isolate, Code* host, LoadGlobalICNexus* nexus);
+
+ protected:
+ Handle<Code> slow_stub() const override {
+ return isolate()->builtins()->LoadGlobalIC_Slow();
+ }
+};
class KeyedLoadIC : public LoadIC {
public:
@@ -337,7 +349,7 @@
static void GenerateMegamorphic(MacroAssembler* masm);
static Handle<Code> initialize_stub_in_optimized_code(
- Isolate* isolate, State initialization_state, ExtraICState extra_state);
+ Isolate* isolate, ExtraICState extra_state);
static Handle<Code> ChooseMegamorphicStub(Isolate* isolate,
ExtraICState extra_state);
@@ -366,13 +378,10 @@
// Code generators for stub routines. Only called once at startup.
static void GenerateSlow(MacroAssembler* masm);
static void GenerateMiss(MacroAssembler* masm);
- static void GenerateMegamorphic(MacroAssembler* masm);
static void GenerateNormal(MacroAssembler* masm);
- static void GenerateRuntimeSetProperty(MacroAssembler* masm,
- LanguageMode language_mode);
static Handle<Code> initialize_stub_in_optimized_code(
- Isolate* isolate, LanguageMode language_mode, State initialization_state);
+ Isolate* isolate, LanguageMode language_mode);
MUST_USE_RESULT MaybeHandle<Object> Store(
Handle<Object> object, Handle<Name> name, Handle<Object> value,
@@ -386,7 +395,9 @@
protected:
// Stub accessors.
- Handle<Code> slow_stub() const;
+ Handle<Code> slow_stub() const {
+ return isolate()->builtins()->StoreIC_Slow();
+ }
// Update the inline cache and the global stub cache based on the
// lookup result.
@@ -428,7 +439,7 @@
LanguageMode language_mode);
static Handle<Code> initialize_stub_in_optimized_code(
- Isolate* isolate, LanguageMode language_mode, State initialization_state);
+ Isolate* isolate, LanguageMode language_mode);
static Handle<Code> ChooseMegamorphicStub(Isolate* isolate,
ExtraICState extra_state);