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:
parent
57e8217c10
commit
8558fde3a5
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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,
|
|||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user