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