Index: src/x64/stub-cache-x64.cc |
diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc |
index 5fdc2a1a7279fa256dda6a77a57f7bfe3ffa97ef..5ab1347ad0ff52e71aaffbf1ad8a29deb5f5f1e8 100644 |
--- a/src/x64/stub-cache-x64.cc |
+++ b/src/x64/stub-cache-x64.cc |
@@ -2790,9 +2790,9 @@ Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic( |
Handle<Code> LoadStubCompiler::CompileLoadNonexistent( |
- Handle<String> name, |
Handle<JSObject> object, |
Handle<JSObject> last, |
+ Handle<String> name, |
Handle<GlobalObject> global) { |
// ----------- S t a t e ------------- |
// -- rax : receiver |
@@ -2837,44 +2837,25 @@ Handle<Code> LoadStubCompiler::CompileLoadNonexistent( |
} |
-Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object, |
- Handle<JSObject> holder, |
- PropertyIndex index, |
- Handle<String> name) { |
- // ----------- S t a t e ------------- |
- // -- rax : receiver |
- // -- rcx : name |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
+Register* LoadStubCompiler::registers() { |
+ // receiver, name, scratch1, scratch2, scratch3, scratch4. |
+ static Register registers[] = { rax, rcx, rbx, rdx, rdi, r8 }; |
+ return registers; |
+} |
- GenerateLoadField(object, holder, rax, rbx, rdx, rdi, index, name, &miss); |
- __ bind(&miss); |
- GenerateLoadMiss(masm(), Code::LOAD_IC); |
- // Return the generated code. |
- return GetCode(Code::FIELD, name); |
+Register* KeyedLoadStubCompiler::registers() { |
+ // receiver, name, scratch1, scratch2, scratch3, scratch4. |
+ static Register registers[] = { rdx, rax, rbx, rcx, rdi, r8 }; |
+ return registers; |
} |
-Handle<Code> LoadStubCompiler::CompileLoadCallback( |
- Handle<String> name, |
- Handle<JSObject> object, |
- Handle<JSObject> holder, |
- Handle<AccessorInfo> callback) { |
- // ----------- S t a t e ------------- |
- // -- rax : receiver |
- // -- rcx : name |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- GenerateLoadCallback(object, holder, rax, rcx, rdx, rbx, rdi, r8, callback, |
- name, &miss); |
- __ bind(&miss); |
- GenerateLoadMiss(masm(), Code::LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::CALLBACKS, name); |
+void KeyedLoadStubCompiler::GenerateNameCheck(Handle<String> name, |
+ Register name_reg, |
+ Label* miss) { |
+ __ Cmp(name_reg, name); |
+ __ j(not_equal, miss); |
} |
@@ -2916,9 +2897,9 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm, |
Handle<Code> LoadStubCompiler::CompileLoadViaGetter( |
- Handle<String> name, |
Handle<JSObject> receiver, |
Handle<JSObject> holder, |
+ Handle<String> name, |
Handle<JSFunction> getter) { |
// ----------- S t a t e ------------- |
// -- rax : receiver |
@@ -2941,50 +2922,6 @@ Handle<Code> LoadStubCompiler::CompileLoadViaGetter( |
} |
-Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object, |
- Handle<JSObject> holder, |
- Handle<JSFunction> value, |
- Handle<String> name) { |
- // ----------- S t a t e ------------- |
- // -- rax : receiver |
- // -- rcx : name |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- |
- GenerateLoadConstant(object, holder, rax, rbx, rdx, rdi, value, name, &miss); |
- __ bind(&miss); |
- GenerateLoadMiss(masm(), Code::LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::CONSTANT_FUNCTION, name); |
-} |
- |
- |
-Handle<Code> LoadStubCompiler::CompileLoadInterceptor(Handle<JSObject> receiver, |
- Handle<JSObject> holder, |
- Handle<String> name) { |
- // ----------- S t a t e ------------- |
- // -- rax : receiver |
- // -- rcx : name |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- LookupResult lookup(isolate()); |
- LookupPostInterceptor(holder, name, &lookup); |
- |
- // TODO(368): Compile in the whole chain: all the interceptors in |
- // prototypes and ultimate answer. |
- GenerateLoadInterceptor(receiver, holder, &lookup, rax, rcx, rdx, rbx, rdi, |
- name, &miss); |
- __ bind(&miss); |
- GenerateLoadMiss(masm(), Code::LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::INTERCEPTOR, name); |
-} |
- |
- |
Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
Handle<JSObject> object, |
Handle<GlobalObject> holder, |
@@ -3029,124 +2966,6 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
} |
-Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name, |
- Handle<JSObject> receiver, |
- Handle<JSObject> holder, |
- PropertyIndex index) { |
- // ----------- S t a t e ------------- |
- // -- rax : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- |
- Counters* counters = isolate()->counters(); |
- __ IncrementCounter(counters->keyed_load_field(), 1); |
- |
- // Check that the name has not changed. |
- __ Cmp(rax, name); |
- __ j(not_equal, &miss); |
- |
- GenerateLoadField(receiver, holder, rdx, rbx, rcx, rdi, index, name, &miss); |
- |
- __ bind(&miss); |
- __ DecrementCounter(counters->keyed_load_field(), 1); |
- GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::FIELD, name); |
-} |
- |
- |
-Handle<Code> KeyedLoadStubCompiler::CompileLoadCallback( |
- Handle<String> name, |
- Handle<JSObject> receiver, |
- Handle<JSObject> holder, |
- Handle<AccessorInfo> callback) { |
- // ----------- S t a t e ------------- |
- // -- rax : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- Counters* counters = isolate()->counters(); |
- __ IncrementCounter(counters->keyed_load_callback(), 1); |
- |
- // Check that the name has not changed. |
- __ Cmp(rax, name); |
- __ j(not_equal, &miss); |
- |
- GenerateLoadCallback(receiver, holder, rdx, rax, rbx, rcx, rdi, r8, callback, |
- name, &miss); |
- __ bind(&miss); |
- __ DecrementCounter(counters->keyed_load_callback(), 1); |
- GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::CALLBACKS, name); |
-} |
- |
- |
-Handle<Code> KeyedLoadStubCompiler::CompileLoadConstant( |
- Handle<String> name, |
- Handle<JSObject> receiver, |
- Handle<JSObject> holder, |
- Handle<JSFunction> value) { |
- // ----------- S t a t e ------------- |
- // -- rax : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- |
- Counters* counters = isolate()->counters(); |
- __ IncrementCounter(counters->keyed_load_constant_function(), 1); |
- |
- // Check that the name has not changed. |
- __ Cmp(rax, name); |
- __ j(not_equal, &miss); |
- |
- GenerateLoadConstant(receiver, holder, rdx, rbx, rcx, rdi, |
- value, name, &miss); |
- __ bind(&miss); |
- __ DecrementCounter(counters->keyed_load_constant_function(), 1); |
- GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::CONSTANT_FUNCTION, name); |
-} |
- |
- |
-Handle<Code> KeyedLoadStubCompiler::CompileLoadInterceptor( |
- Handle<JSObject> receiver, |
- Handle<JSObject> holder, |
- Handle<String> name) { |
- // ----------- S t a t e ------------- |
- // -- rax : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
- Label miss; |
- Counters* counters = isolate()->counters(); |
- __ IncrementCounter(counters->keyed_load_interceptor(), 1); |
- |
- // Check that the name has not changed. |
- __ Cmp(rax, name); |
- __ j(not_equal, &miss); |
- |
- LookupResult lookup(isolate()); |
- LookupPostInterceptor(holder, name, &lookup); |
- GenerateLoadInterceptor(receiver, holder, &lookup, rdx, rax, rcx, rbx, rdi, |
- name, &miss); |
- __ bind(&miss); |
- __ DecrementCounter(counters->keyed_load_interceptor(), 1); |
- GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
- |
- // Return the generated code. |
- return GetCode(Code::INTERCEPTOR, name); |
-} |
- |
- |
Handle<Code> KeyedLoadStubCompiler::CompileLoadElement( |
Handle<Map> receiver_map) { |
// ----------- S t a t e ------------- |