Commit 72ac6f61 authored by whesse@chromium.org's avatar whesse@chromium.org

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
parent 668497b2
...@@ -471,8 +471,36 @@ Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* a, String* b) { ...@@ -471,8 +471,36 @@ Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* a, String* b) {
Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
JSGlobalPropertyCell* cell, JSGlobalPropertyCell* cell,
String* name) { String* name) {
// TODO(X64): Implement a real stub. // ----------- S t a t e -------------
return Failure::InternalError(); // -- 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 ...@@ -98,7 +98,7 @@ invalid-lhs: PASS || CRASH || FAIL
debug-stepin-constructor: CRASH || FAIL debug-stepin-constructor: CRASH || FAIL
debug-stepin-function-call: CRASH || FAIL debug-stepin-function-call: CRASH || FAIL
debug-stepin-accessor: CRASH || FAIL debug-stepin-accessor: CRASH || FAIL
new: CRASH || FAIL new: PASS || CRASH || FAIL
fuzz-natives: PASS || TIMEOUT fuzz-natives: PASS || TIMEOUT
greedy: PASS || TIMEOUT greedy: PASS || TIMEOUT
debug-handle: CRASH || FAIL debug-handle: CRASH || FAIL
......
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