Revision: 2543
Author: [email protected]
Date: Mon Jul 27 08:02:35 2009
Log: X64: Add inline cache stub for storing to globals.
Review URL: http://codereview.chromium.org/160160
http://code.google.com/p/v8/source/detail?r=2543
Modified:
/branches/bleeding_edge/src/x64/stub-cache-x64.cc
/branches/bleeding_edge/test/mjsunit/mjsunit.status
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jul 27 03:39:21
2009
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jul 27 08:02:35
2009
@@ -471,8 +471,36 @@
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);
}
=======================================
--- /branches/bleeding_edge/test/mjsunit/mjsunit.status Thu Jul 16 05:49:14
2009
+++ /branches/bleeding_edge/test/mjsunit/mjsunit.status Mon Jul 27 08:02:35
2009
@@ -98,7 +98,7 @@
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
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---