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

Unified Diff: src/x64/ic-x64.cc

Issue 6026017: Fix/implement new write barrier for x64. (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: '' Created 9 years, 11 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/x64/ic-x64.cc
===================================================================
--- src/x64/ic-x64.cc (revision 6183)
+++ src/x64/ic-x64.cc (working copy)
@@ -269,10 +269,8 @@
__ movq(Operand(scratch1, 0), value);
// Update write barrier. Make sure not to clobber the value.
-#ifdef ENABLE_CARDMARKING_WRITE_BARRIER
__ movq(scratch0, value);
- __ RecordWrite(elements, scratch1, scratch0);
-#endif
+ __ RecordWrite(elements, scratch1, scratch0, kDontSaveFPRegs);
}
@@ -1019,10 +1017,8 @@
__ bind(&non_smi_value);
// Slow case that needs to retain rcx for use by RecordWrite.
// Update write barrier for the elements array address.
-#ifdef ENABLE_CARDMARKING_WRITE_BARRIER
__ movq(rdx, rax);
- __ RecordWriteNonSmi(rbx, 0, rdx, rcx);
-#endif
+ __ RecordWriteNonSmi(rbx, 0, rdx, rcx, kDontSaveFPRegs);
__ ret(0);
}
@@ -1638,9 +1634,7 @@
Address encoded_offsets_address = test_instruction_address + 1;
int encoded_offsets = *reinterpret_cast<int*>(encoded_offsets_address);
int delta_to_map_check = -(encoded_offsets & 0xFFFF);
-#ifdef ENABLE_CARDMARKING_WRITE_BARRIER
int delta_to_record_write = encoded_offsets >> 16;
-#endif
// Patch the map to check. The map address is the last 8 bytes of
// the 10-byte immediate move instruction.
@@ -1659,7 +1653,6 @@
(offset == 0 && map == Heap::null_value()));
*reinterpret_cast<int*>(offset_address) = offset - kHeapObjectTag;
-#ifdef ENABLE_CARDMARKING_WRITE_BARRIER
// Patch the offset in the write-barrier code. The offset is the
// last 4 bytes of a 7 byte lea instruction.
offset_address = map_check_address + delta_to_record_write + 3;
@@ -1669,7 +1662,6 @@
*reinterpret_cast<int*>(offset_address) == -1 ||
(offset == 0 && map == Heap::null_value()));
*reinterpret_cast<int*>(offset_address) = offset - kHeapObjectTag;
-#endif
return true;
}

Powered by Google App Engine
This is Rietveld 408576698