X64: Add inline cache stub for storing to globals.
Review URL: http://codereview.chromium.org/160160 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2543 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
668497b26a
commit
72ac6f619a
@ -471,8 +471,36 @@ Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* a, String* b) {
|
||||
Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
|
||||
JSGlobalPropertyCell* cell,
|
||||
String* name) {
|
||||
// TODO(X64): Implement a real stub.
|
||||
return Failure::InternalError();
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : name
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : receiver
|
||||
// -----------------------------------
|
||||
Label miss;
|
||||
|
||||
// Check that the map of the global has not changed.
|
||||
__ movq(rbx, Operand(rsp, kPointerSize));
|
||||
__ Cmp(FieldOperand(rbx, HeapObject::kMapOffset),
|
||||
Handle<Map>(object->map()));
|
||||
__ j(not_equal, &miss);
|
||||
|
||||
// Store the value in the cell.
|
||||
__ Move(rcx, Handle<JSGlobalPropertyCell>(cell));
|
||||
__ movq(FieldOperand(rcx, JSGlobalPropertyCell::kValueOffset), rax);
|
||||
|
||||
__ IncrementCounter(&Counters::named_store_global_inline, 1);
|
||||
// Return the value (register rax).
|
||||
__ ret(0);
|
||||
|
||||
// Handle store cache miss.
|
||||
__ bind(&miss);
|
||||
__ IncrementCounter(&Counters::named_store_global_inline_miss, 1);
|
||||
Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
|
||||
__ Jump(ic, RelocInfo::CODE_TARGET);
|
||||
|
||||
// Return the generated code.
|
||||
return GetCode(NORMAL, name);
|
||||
}
|
||||
|
||||
|
||||
|
@ -98,7 +98,7 @@ invalid-lhs: PASS || CRASH || FAIL
|
||||
debug-stepin-constructor: CRASH || FAIL
|
||||
debug-stepin-function-call: CRASH || FAIL
|
||||
debug-stepin-accessor: CRASH || FAIL
|
||||
new: CRASH || FAIL
|
||||
new: PASS || CRASH || FAIL
|
||||
fuzz-natives: PASS || TIMEOUT
|
||||
greedy: PASS || TIMEOUT
|
||||
debug-handle: CRASH || FAIL
|
||||
|
Loading…
Reference in New Issue
Block a user