Revision: 7073
Author: [email protected]
Date: Mon Mar  7 03:26:43 2011
Log: X64 Crankshaft: Revert r7071 and fix DoStoreContextSlot in a different way.
Review URL: http://codereview.chromium.org/6627048
http://code.google.com/p/v8/source/detail?r=7073

Modified:
 /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
 /branches/bleeding_edge/src/x64/lithium-x64.cc
 /branches/bleeding_edge/src/x64/lithium-x64.h
 /branches/bleeding_edge/src/x64/macro-assembler-x64.cc

=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon Mar 7 02:30:58 2011 +++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon Mar 7 03:26:43 2011
@@ -1993,7 +1993,8 @@
   __ movq(ContextOperand(context, instr->slot_index()), value);
   if (instr->needs_write_barrier()) {
     int offset = Context::SlotOffset(instr->slot_index());
-    __ RecordWrite(context, offset, value, kScratchRegister);
+    Register scratch = ToRegister(instr->TempAt(0));
+    __ RecordWrite(context, offset, value, scratch);
   }
 }

=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc      Mon Mar  7 02:28:37 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc      Mon Mar  7 03:26:43 2011
@@ -1728,14 +1728,17 @@
 LInstruction* LChunkBuilder::DoStoreContextSlot(HStoreContextSlot* instr) {
   LOperand* context;
   LOperand* value;
+  LOperand* temp;
   if (instr->NeedsWriteBarrier()) {
     context = UseTempRegister(instr->context());
     value = UseTempRegister(instr->value());
+    temp = TempRegister();
   } else {
     context = UseRegister(instr->context());
     value = UseRegister(instr->value());
-  }
-  return new LStoreContextSlot(context, value);
+    temp = NULL;
+  }
+  return new LStoreContextSlot(context, value, temp);
 }


=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.h       Thu Mar  3 08:09:52 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.h       Mon Mar  7 03:26:43 2011
@@ -1258,11 +1258,12 @@
 };


-class LStoreContextSlot: public LTemplateInstruction<0, 2, 0> {
+class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> {
  public:
-  LStoreContextSlot(LOperand* context, LOperand* value) {
+  LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) {
     inputs_[0] = context;
     inputs_[1] = value;
+    temps_[0] = temp;
   }

   DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot")
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Mar 7 02:28:37 2011 +++ /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Mar 7 03:26:43 2011
@@ -95,13 +95,7 @@
   if (FLAG_debug_code) {
     // Check that the object is not in new space.
     NearLabel not_in_new_space;
-    if (addr.is(kScratchRegister)) {
-      push(kScratchRegister);
-      InNewSpace(object, scratch, not_equal, &not_in_new_space);
-      pop(kScratchRegister);
-    } else {
-      InNewSpace(object, scratch, not_equal, &not_in_new_space);
-    }
+    InNewSpace(object, scratch, not_equal, &not_in_new_space);
     Abort("new-space object passed to RecordWriteHelper");
     bind(&not_in_new_space);
   }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to