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

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

Issue 893073006: Add map-based read barrier to WeakCell Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix merge Created 5 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
« no previous file with comments | « src/ia32/macro-assembler-ia32.h ('k') | src/ic/ia32/handler-compiler-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ia32/macro-assembler-ia32.cc
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
index 53ffa39357c97a47aa53df3f934a712fb30e9380..3bce05215c181b58819573ae73115b76ef9043e6 100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -2399,19 +2399,48 @@ void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
void MacroAssembler::CmpWeakValue(Register value, Handle<WeakCell> cell,
Register scratch) {
mov(scratch, cell);
- cmp(value, FieldOperand(scratch, WeakCell::kValueOffset));
+ cmp(value,
+ FieldOperand(scratch, WeakCell::kValueOffsetDontForgetTheReadBarrier));
}
-void MacroAssembler::GetWeakValue(Register value, Handle<WeakCell> cell) {
+void MacroAssembler::GetWeakValueNoReadBarrier(Register value,
+ Handle<WeakCell> cell) {
mov(value, cell);
- mov(value, FieldOperand(value, WeakCell::kValueOffset));
+ mov(value,
+ FieldOperand(value, WeakCell::kValueOffsetDontForgetTheReadBarrier));
+}
+
+
+void MacroAssembler::LoadWeakValueNoReadBarrier(Register value,
+ Handle<WeakCell> cell,
+ Label* miss) {
+ GetWeakValueNoReadBarrier(value, cell);
+ JumpIfSmi(value, miss);
+}
+
+
+void MacroAssembler::GetWeakValue(Register value, Register scratch,
+ Handle<WeakCell> cell) {
+ DCHECK(!value.is(scratch));
+ mov(value, cell);
+
+ // The read barrier means we have to overwrite the cell map with the one that
+ // indicates the cell has been read from. TODO(erikcorry): This should not
+ // emit reloc info unless the serializer is enabled: the map is not going to
+ // move or die.
+ Handle<Map> weak_cell_map(isolate()->heap()->used_weak_cell_map());
+ mov(scratch, weak_cell_map);
+ mov(FieldOperand(value, HeapObject::kMapOffset), scratch);
+
+ mov(value,
+ FieldOperand(value, WeakCell::kValueOffsetDontForgetTheReadBarrier));
}
void MacroAssembler::LoadWeakValue(Register value, Handle<WeakCell> cell,
- Label* miss) {
- GetWeakValue(value, cell);
+ Register scratch, Label* miss) {
+ GetWeakValue(value, scratch, cell);
JumpIfSmi(value, miss);
}
« no previous file with comments | « src/ia32/macro-assembler-ia32.h ('k') | src/ic/ia32/handler-compiler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698