Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(541)

Unified Diff: src/ia32/macro-assembler-ia32.cc

Issue 6542047: Basic implementation of incremental marking. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/ia32/macro-assembler-ia32.cc
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
index 73b92be444c50e0a5a4966ed564d96000309c0b4..3a582f40170e01c6819387936ba807d88e52559b 100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -48,6 +48,26 @@ MacroAssembler::MacroAssembler(void* buffer, int size)
code_object_(Heap::undefined_value()) {
}
+
+void MacroAssembler::IncrementalMarkingRecordWrite(Register object,
+ Register value,
+ Register scratch) {
+ ASSERT(!object.is(scratch));
+ ASSERT(!value.is(scratch));
+ push(eax);
+ push(ecx);
+ push(edx);
+ PrepareCallCFunction(2, scratch);
+ mov(Operand(esp, 0 * kPointerSize), object);
+ mov(Operand(esp, 1 * kPointerSize), value);
+ CallCFunction(
+ ExternalReference::incremental_marking_record_write_function(), 2);
+ pop(edx);
+ pop(ecx);
+ pop(eax);
+}
+
+
void MacroAssembler::RecordWriteHelper(Register object,
Register addr,
Register scratch,
@@ -88,13 +108,15 @@ void MacroAssembler::RecordWrite(Register object,
SaveFPRegsMode save_fp) {
// First, check if a write barrier is even needed. The tests below
// catch stores of Smis and stores into young gen.
- NearLabel done;
+ Label done;
// Skip barrier if writing a smi.
ASSERT_EQ(0, kSmiTag);
test(value, Immediate(kSmiTagMask));
j(zero, &done);
+ IncrementalMarkingRecordWrite(object, value, scratch);
+
InNewSpace(object, value, equal, &done);
// The offset is relative to a tagged or untagged HeapObject pointer,

Powered by Google App Engine
This is Rietveld 408576698