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
This commit is contained in:
whesse@chromium.org 2009-07-27 10:39:21 +00:00
parent 57e8217c10
commit 8558fde3a5
5 changed files with 56 additions and 47 deletions

View File

@ -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) {
__ 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) {
// -- 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);

View File

@ -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,
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);

View File

@ -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) {
// -- 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) {
__ 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) {
// -- 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) {

View File

@ -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

View File

@ -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,
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();
} }