Revision: 9344
Author:   [email protected]
Date:     Tue Sep 20 06:32:27 2011
Log: Put back the asserts in RememberedSetHelper, but correct this time.
Fix some incorrect comments.
Review URL: http://codereview.chromium.org/7977005
http://code.google.com/p/v8/source/detail?r=9344

Modified:
 /branches/bleeding_edge/src/arm/code-stubs-arm.cc
 /branches/bleeding_edge/src/arm/full-codegen-arm.cc
 /branches/bleeding_edge/src/arm/macro-assembler-arm.cc
 /branches/bleeding_edge/src/arm/macro-assembler-arm.h
 /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
 /branches/bleeding_edge/src/ia32/full-codegen-ia32.cc
 /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc
 /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h
 /branches/bleeding_edge/src/x64/code-stubs-x64.cc
 /branches/bleeding_edge/src/x64/full-codegen-x64.cc
 /branches/bleeding_edge/src/x64/macro-assembler-x64.cc
 /branches/bleeding_edge/src/x64/macro-assembler-x64.h

=======================================
--- /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Sep 19 11:50:06 2011 +++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Tue Sep 20 06:32:27 2011
@@ -6893,8 +6893,11 @@
   __ b(&skip_to_incremental_compacting);

   if (remembered_set_action_ == EMIT_REMEMBERED_SET) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   }
   __ Ret();

@@ -6920,7 +6923,7 @@
     Label dont_need_remembered_set;

     __ ldr(regs_.scratch0(), MemOperand(regs_.address(), 0));
-    __ JumpIfNotInNewSpace(regs_.scratch0(),
+    __ JumpIfNotInNewSpace(regs_.scratch0(),  // Value.
                            regs_.scratch0(),
                            &dont_need_remembered_set);

@@ -6936,8 +6939,11 @@
         masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
     InformIncrementalMarker(masm, mode);
     regs_.Restore(masm);
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);

     __ bind(&dont_need_remembered_set);
   }
@@ -6999,8 +7005,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ Ret();
   }
@@ -7040,8 +7049,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ Ret();
   }
=======================================
--- /branches/bleeding_edge/src/arm/full-codegen-arm.cc Mon Sep 19 11:36:47 2011 +++ /branches/bleeding_edge/src/arm/full-codegen-arm.cc Tue Sep 20 06:32:27 2011
@@ -3174,10 +3174,16 @@
   // pauses in the middle of scanning a single object.  Therefore the
   // incremental marker is not disturbed, so we don't need to call the
   // RecordWrite stub that notifies the incremental marker.
-  __ RememberedSetHelper(
- index1, scratch2, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
-  __ RememberedSetHelper(
- index2, scratch2, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index1,
+                         scratch2,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index2,
+                         scratch2,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);

   __ bind(&no_remembered_set);
   // We are done. Drop elements from the stack, and return undefined.
=======================================
--- /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Tue Sep 20 03:06:23 2011 +++ /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Tue Sep 20 06:32:27 2011
@@ -523,11 +523,18 @@
 }


-void MacroAssembler::RememberedSetHelper(Register address,
+void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
+                                         Register address,
                                          Register scratch,
                                          SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
   Label done;
+  if (FLAG_debug_code) {
+    Label ok;
+    JumpIfNotInNewSpace(object, scratch, &ok);
+    stop("Remembered set pointer is in new space");
+    bind(&ok);
+  }
   // Load store buffer top.
   ExternalReference store_buffer =
       ExternalReference::store_buffer_top(isolate());
=======================================
--- /branches/bleeding_edge/src/arm/macro-assembler-arm.h Tue Sep 20 03:06:23 2011 +++ /branches/bleeding_edge/src/arm/macro-assembler-arm.h Tue Sep 20 06:32:27 2011
@@ -181,7 +181,8 @@
// Record in the remembered set the fact that we have a pointer to new space // at the address pointed to by the addr register. Only works if addr is not
   // in new space.
-  void RememberedSetHelper(Register addr,
+  void RememberedSetHelper(Register object,  // Used for debug code.
+                           Register addr,
                            Register scratch,
                            SaveFPRegsMode save_fp,
                            RememberedSetFinalAction and_then);
@@ -193,7 +194,7 @@
                      Label* condition_met);

// Check if object is in new space. Jumps if the object is not in new space.
-  // The register scratch can be object itself, but it will be clobbered.
+ // The register scratch can be object itself, but scratch will be clobbered.
   void JumpIfNotInNewSpace(Register object,
                            Register scratch,
                            Label* branch) {
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Sep 19 11:36:47 2011 +++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Tue Sep 20 06:32:27 2011
@@ -6662,8 +6662,11 @@
   __ jmp(&skip_to_incremental_compacting, Label::kFar);

   if (remembered_set_action_ == EMIT_REMEMBERED_SET) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
@@ -6688,7 +6691,7 @@
     Label dont_need_remembered_set;

     __ mov(regs_.scratch0(), Operand(regs_.address(), 0));
-    __ JumpIfNotInNewSpace(regs_.scratch0(),
+    __ JumpIfNotInNewSpace(regs_.scratch0(),  // Value.
                            regs_.scratch0(),
                            &dont_need_remembered_set);

@@ -6706,8 +6709,11 @@
         mode);
     InformIncrementalMarker(masm, mode);
     regs_.Restore(masm);
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);

     __ bind(&dont_need_remembered_set);
   }
@@ -6770,8 +6776,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
@@ -6815,8 +6824,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
=======================================
--- /branches/bleeding_edge/src/ia32/full-codegen-ia32.cc Tue Sep 20 02:44:23 2011 +++ /branches/bleeding_edge/src/ia32/full-codegen-ia32.cc Tue Sep 20 06:32:27 2011
@@ -3168,10 +3168,16 @@
   // pauses in the middle of scanning a single object.  Therefore the
   // incremental marker is not disturbed, so we don't need to call the
   // RecordWrite stub that notifies the incremental marker.
-  __ RememberedSetHelper(
-      index_1, temp, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
-  __ RememberedSetHelper(
-      index_2, temp, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index_1,
+                         temp,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index_2,
+                         temp,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);

   __ bind(&no_remembered_set);

=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Tue Sep 20 04:30:18 2011 +++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Tue Sep 20 06:32:27 2011
@@ -79,11 +79,18 @@


 void MacroAssembler::RememberedSetHelper(
+    Register object,  // Only used for debug checks.
     Register addr,
     Register scratch,
     SaveFPRegsMode save_fp,
     MacroAssembler::RememberedSetFinalAction and_then) {
   Label done;
+  if (FLAG_debug_code) {
+    Label ok;
+    JumpIfNotInNewSpace(object, scratch, &ok, Label::kNear);
+    int3();
+    bind(&ok);
+  }
   // Load store buffer top.
   ExternalReference store_buffer =
       ExternalReference::store_buffer_top(isolate());
=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h Tue Sep 20 03:06:23 2011 +++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h Tue Sep 20 06:32:27 2011
@@ -77,7 +77,8 @@
// Record in the remembered set the fact that we have a pointer to new space // at the address pointed to by the addr register. Only works if addr is not
   // in new space.
-  void RememberedSetHelper(Register addr,
+  void RememberedSetHelper(Register object,  // Used for debug code.
+                           Register addr,
                            Register scratch,
                            SaveFPRegsMode save_fp,
                            RememberedSetFinalAction and_then);
@@ -90,7 +91,7 @@
                      Label::Distance condition_met_distance = Label::kFar);

// Check if object is in new space. Jumps if the object is not in new space.
-  // The register scratch can be object itself, but it will be clobbered.
+ // The register scratch can be object itself, but scratch will be clobbered.
   void JumpIfNotInNewSpace(Register object,
                            Register scratch,
                            Label* branch,
@@ -182,7 +183,7 @@

   // For page containing |object| mark region covering |address|
   // dirty. |object| is the object being stored into, |value| is the
-  // object being stored. All registers are clobbered by the
+ // object being stored. The address and value registers are clobbered by the
   // operation. RecordWrite filters out smis so it does not update the
   // write barrier if the value is a smi.
   void RecordWrite(
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Sep 19 11:36:47 2011 +++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Tue Sep 20 06:32:27 2011
@@ -5633,8 +5633,11 @@
   __ jmp(&skip_to_incremental_compacting, Label::kFar);

   if (remembered_set_action_ == EMIT_REMEMBERED_SET) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
@@ -5675,8 +5678,11 @@
         masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
     InformIncrementalMarker(masm, mode);
     regs_.Restore(masm);
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);

     __ bind(&dont_need_remembered_set);
   }
@@ -5752,8 +5758,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
@@ -5794,8 +5803,11 @@

   regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
-    __ RememberedSetHelper(
- address_, value_, save_fp_regs_mode_, MacroAssembler::kReturnAtEnd);
+    __ RememberedSetHelper(object_,
+                           address_,
+                           value_,
+                           save_fp_regs_mode_,
+                           MacroAssembler::kReturnAtEnd);
   } else {
     __ ret(0);
   }
=======================================
--- /branches/bleeding_edge/src/x64/full-codegen-x64.cc Tue Sep 20 02:44:23 2011 +++ /branches/bleeding_edge/src/x64/full-codegen-x64.cc Tue Sep 20 06:32:27 2011
@@ -3036,10 +3036,16 @@
   // pauses in the middle of scanning a single object.  Therefore the
   // incremental marker is not disturbed, so we don't need to call the
   // RecordWrite stub that notifies the incremental marker.
-  __ RememberedSetHelper(
-      index_1, temp, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
-  __ RememberedSetHelper(
-      index_2, temp, kDontSaveFPRegs, MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index_1,
+                         temp,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);
+  __ RememberedSetHelper(elements,
+                         index_2,
+                         temp,
+                         kDontSaveFPRegs,
+                         MacroAssembler::kFallThroughAtEnd);

   __ bind(&no_remembered_set);

=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Tue Sep 20 04:30:18 2011 +++ /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Tue Sep 20 06:32:27 2011
@@ -197,10 +197,17 @@
 }


-void MacroAssembler::RememberedSetHelper(Register addr,
+void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
+                                         Register addr,
                                          Register scratch,
                                          SaveFPRegsMode save_fp,
RememberedSetFinalAction and_then) {
+  if (FLAG_debug_code) {
+    Label ok;
+    JumpIfNotInNewSpace(object, scratch, &ok, Label::kNear);
+    int3();
+    bind(&ok);
+  }
   // Load store buffer top.
   LoadRoot(scratch, Heap::kStoreBufferTopRootIndex);
   // Store pointer to buffer.
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.h Tue Sep 20 03:06:23 2011 +++ /branches/bleeding_edge/src/x64/macro-assembler-x64.h Tue Sep 20 06:32:27 2011
@@ -165,7 +165,8 @@
// Record in the remembered set the fact that we have a pointer to new space // at the address pointed to by the addr register. Only works if addr is not
   // in new space.
-  void RememberedSetHelper(Register addr,
+  void RememberedSetHelper(Register object,  // Used for debug code.
+                           Register addr,
                            Register scratch,
                            SaveFPRegsMode save_fp,
                            RememberedSetFinalAction and_then);
@@ -178,7 +179,7 @@
                      Label::Distance condition_met_distance = Label::kFar);

// Check if object is in new space. Jumps if the object is not in new space.
-  // The register scratch can be object itself, but it will be clobbered.
+ // The register scratch can be object itself, but scratch will be clobbered.
   void JumpIfNotInNewSpace(Register object,
                            Register scratch,
                            Label* branch,
@@ -267,9 +268,9 @@
       RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
       SmiCheck smi_check = INLINE_SMI_CHECK);

-  // For page containing |object| mark region covering [address]
+  // For page containing |object| mark region covering |address|
   // dirty. |object| is the object being stored into, |value| is the
-  // object being stored. All registers are clobbered by the
+ // object being stored. The address and value registers are clobbered by the
   // operation.  RecordWrite filters out smis so it does not update
   // the write barrier if the value is a smi.
   void RecordWrite(

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

Reply via email to