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

Reply via email to