Commit 8558fde3 authored by whesse@chromium.org's avatar whesse@chromium.org

Make X64 implementation update Store ic stubs. Remove comment that talks...

Make X64 implementation update Store ic stubs.  Remove comment that talks about "below" on the stack meaning closer to the top.
Review URL: http://codereview.chromium.org/159402

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2539 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 57e8217c
...@@ -749,12 +749,10 @@ void LoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) { ...@@ -749,12 +749,10 @@ void LoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) {
// ----------------------------------- // -----------------------------------
__ mov(eax, Operand(esp, kPointerSize)); __ mov(eax, Operand(esp, kPointerSize));
// Move the return address below the arguments.
__ pop(ebx); __ pop(ebx);
__ push(eax); __ push(eax); // receiver
__ push(ecx); __ push(ecx); // name
__ push(ebx); __ push(ebx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime(f, 2); __ TailCallRuntime(f, 2);
...@@ -877,12 +875,10 @@ void KeyedLoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) { ...@@ -877,12 +875,10 @@ void KeyedLoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) {
__ mov(eax, Operand(esp, kPointerSize)); __ mov(eax, Operand(esp, kPointerSize));
__ mov(ecx, Operand(esp, 2 * kPointerSize)); __ mov(ecx, Operand(esp, 2 * kPointerSize));
// Move the return address below the arguments.
__ pop(ebx); __ pop(ebx);
__ push(ecx); __ push(ecx); // receiver
__ push(eax); __ push(eax); // name
__ push(ebx); __ push(ebx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime(f, 2); __ TailCallRuntime(f, 2);
...@@ -917,12 +913,12 @@ void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { ...@@ -917,12 +913,12 @@ void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
// -- esp[4] : receiver // -- esp[4] : receiver
// ----------------------------------- // -----------------------------------
// Move the return address below the arguments.
__ pop(ebx); __ pop(ebx);
__ push(Operand(esp, 0)); __ push(Operand(esp, 0)); // receiver
__ push(ecx); __ push(ecx); // transition map
__ push(eax); __ push(eax); // value
__ push(ebx); __ push(ebx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime( __ TailCallRuntime(
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3); ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3);
......
...@@ -978,10 +978,6 @@ Object* StoreIC::Store(State state, ...@@ -978,10 +978,6 @@ Object* StoreIC::Store(State state,
return *value; return *value;
} }
// TODO(X64): Enable inline cache for StoreIC.
#ifdef V8_TARGET_ARCH_X64
USE(&LookupForWrite); // The compiler complains otherwise.
#else
// Lookup the property locally in the receiver. // Lookup the property locally in the receiver.
if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) { if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
LookupResult lookup; LookupResult lookup;
...@@ -989,7 +985,6 @@ Object* StoreIC::Store(State state, ...@@ -989,7 +985,6 @@ Object* StoreIC::Store(State state,
UpdateCaches(&lookup, state, receiver, name, value); UpdateCaches(&lookup, state, receiver, name, value);
} }
} }
#endif
// Set the property. // Set the property.
return receiver->SetProperty(*name, *value, NONE); return receiver->SetProperty(*name, *value, NONE);
......
...@@ -183,12 +183,10 @@ void KeyedLoadIC::Generate(MacroAssembler* masm, ...@@ -183,12 +183,10 @@ void KeyedLoadIC::Generate(MacroAssembler* masm,
__ movq(rax, Operand(rsp, kPointerSize)); __ movq(rax, Operand(rsp, kPointerSize));
__ movq(rcx, Operand(rsp, 2 * kPointerSize)); __ movq(rcx, Operand(rsp, 2 * kPointerSize));
// Move the return address below the arguments.
__ pop(rbx); __ pop(rbx);
__ push(rcx); __ push(rcx); // receiver
__ push(rax); __ push(rax); // name
__ push(rbx); __ push(rbx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime(f, 2); __ TailCallRuntime(f, 2);
...@@ -369,19 +367,19 @@ void KeyedStoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) { ...@@ -369,19 +367,19 @@ void KeyedStoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
// -- rsp[16] : receiver // -- rsp[16] : receiver
// ----------------------------------- // -----------------------------------
// Move the return address below the arguments.
__ pop(rcx); __ pop(rcx);
__ push(Operand(rsp, 1 * kPointerSize)); __ push(Operand(rsp, 1 * kPointerSize)); // receiver
__ push(Operand(rsp, 1 * kPointerSize)); __ push(Operand(rsp, 1 * kPointerSize)); // key
__ push(rax); __ push(rax); // value
__ push(rcx); __ push(rcx); // return address
// Do tail-call to runtime routine. // Do tail-call to runtime routine.
__ TailCallRuntime(f, 3); __ TailCallRuntime(f, 3);
} }
void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) { void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
Generate(masm, ExternalReference(IC_Utility(kKeyedStoreIC_Miss))); __ int3();
__ movq(rax, Immediate(0xdead1234));
} }
...@@ -584,11 +582,10 @@ void LoadIC::Generate(MacroAssembler* masm, ExternalReference const& f) { ...@@ -584,11 +582,10 @@ void LoadIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
__ movq(rax, Operand(rsp, kPointerSize)); __ movq(rax, Operand(rsp, kPointerSize));
// Move the return address below the arguments.
__ pop(rbx); __ pop(rbx);
__ push(rax); __ push(rax); // receiver
__ push(rcx); __ push(rcx); // name
__ push(rbx); __ push(rbx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime(f, 2); __ TailCallRuntime(f, 2);
...@@ -654,19 +651,33 @@ void StoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) { ...@@ -654,19 +651,33 @@ void StoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
// -- rsp[0] : return address // -- rsp[0] : return address
// -- rsp[8] : receiver // -- rsp[8] : receiver
// ----------------------------------- // -----------------------------------
// Move the return address below the arguments.
__ pop(rbx); __ pop(rbx);
__ push(Operand(rsp, 0)); __ push(Operand(rsp, 0)); // receiver
__ push(rcx); __ push(rcx); // name
__ push(rax); __ push(rax); // value
__ push(rbx); __ push(rbx); // return address
// Perform tail call to the entry. // Perform tail call to the entry.
__ TailCallRuntime(f, 3); __ TailCallRuntime(f, 3);
} }
void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); // ----------- S t a t e -------------
// -- rax : value
// -- rcx : Map (target of map transition)
// -- rsp[0] : return address
// -- rsp[8] : receiver
// -----------------------------------
__ pop(rbx);
__ push(Operand(rsp, 0)); // receiver
__ push(rcx); // transition map
__ push(rax); // value
__ push(rbx); // return address
// Perform tail call to the entry.
__ TailCallRuntime(
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3);
} }
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
......
...@@ -151,6 +151,13 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) { ...@@ -151,6 +151,13 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) {
void MacroAssembler::TailCallRuntime(ExternalReference const& ext, void MacroAssembler::TailCallRuntime(ExternalReference const& ext,
int num_arguments) { int num_arguments) {
// ----------- S t a t e -------------
// -- rsp[0] : return address
// -- rsp[8] : argument num_arguments - 1
// ...
// -- rsp[8 * num_arguments] : argument 0 (receiver)
// -----------------------------------
// TODO(1236192): Most runtime routines don't need the number of // TODO(1236192): Most runtime routines don't need the number of
// arguments passed in because it is constant. At some point we // arguments passed in because it is constant. At some point we
// should remove this need and make the runtime routine entry code // should remove this need and make the runtime routine entry code
......
...@@ -422,8 +422,8 @@ Object* LoadStubCompiler::CompileLoadGlobal(JSObject* object, ...@@ -422,8 +422,8 @@ Object* LoadStubCompiler::CompileLoadGlobal(JSObject* object,
Object* StoreStubCompiler::CompileStoreCallback(JSObject* a, Object* StoreStubCompiler::CompileStoreCallback(JSObject* a,
AccessorInfo* b, AccessorInfo* b,
String* c) { String* c) {
UNIMPLEMENTED(); // TODO(X64): Implement a real stub.
return NULL; return Failure::InternalError();
} }
...@@ -463,16 +463,16 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object, ...@@ -463,16 +463,16 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* a, String* b) { Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* a, String* b) {
UNIMPLEMENTED(); // TODO(X64): Implement a real stub.
return NULL; return Failure::InternalError();
} }
Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
JSGlobalPropertyCell* cell, JSGlobalPropertyCell* cell,
String* name) { String* name) {
UNIMPLEMENTED(); // TODO(X64): Implement a real stub.
return NULL; return Failure::InternalError();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment