return (end >> CARD_BITS) - (address >> CARD_BITS) + 1;
}
-/*
- * This causes the compile to extend the liveness of 'v' till the call to dummy_use
- */
-static void
-dummy_use (gpointer v) {
- __asm__ volatile ("" : "=r"(v) : "r"(v));
-}
-
void
mono_sgen_card_table_wbarrier_set_field (MonoObject *obj, gpointer field_ptr, MonoObject* value)
{
*(void**)field_ptr = value;
if (mono_sgen_ptr_in_nursery (value))
sgen_card_table_mark_address ((mword)field_ptr);
- dummy_use (value);
+ mono_sgen_dummy_use (value);
}
void
*(void**)slot_ptr = value;
if (mono_sgen_ptr_in_nursery (value))
sgen_card_table_mark_address ((mword)slot_ptr);
- dummy_use (value);
+ mono_sgen_dummy_use (value);
}
void
*dest = value;
if (mono_sgen_ptr_in_nursery (value))
sgen_card_table_mark_address ((mword)dest);
- dummy_use (value);
+ mono_sgen_dummy_use (value);
}
} else {
gpointer *end = dest + count;
*dest = value;
if (mono_sgen_ptr_in_nursery (value))
sgen_card_table_mark_address ((mword)dest);
- dummy_use (value);
+ mono_sgen_dummy_use (value);
}
}
}
* ######################################################################
*/
-/*
- * This causes the compile to extend the liveness of 'v' till the call to dummy_use
- */
-static void
-dummy_use (gpointer v) {
- __asm__ volatile ("" : "=r"(v) : "r"(v));
-}
-
RememberedSet*
mono_sgen_alloc_remset (int size, gpointer id, gboolean global)
*(void**)ptr = value;
if (ptr_in_nursery (value))
mono_gc_wbarrier_generic_nostore (ptr);
- dummy_use (value);
+ mono_sgen_dummy_use (value);
}
void mono_gc_wbarrier_value_copy_bitmap (gpointer _dest, gpointer _src, int size, unsigned bitmap)
void mono_sgen_check_consistency (void);
void mono_sgen_check_major_refs (void);
+
+/* Write barrier support */
+
+/*
+ * This causes the compile to extend the liveness of 'v' till the call to dummy_use
+ */
+static inline void
+mono_sgen_dummy_use (gpointer v) {
+#if defined(__GNUC__)
+ __asm__ volatile ("" : "=r"(v) : "r"(v));
+#elif defined(_MSC_VER)
+ __asm {
+ mov eax, v;
+ and eax, eax;
+ };
+#else
+#error "Implement mono_sgen_dummy_use for your compiler"
+#endif
+}
+
#endif /* HAVE_SGEN_GC */
#endif /* __MONO_SGENGC_H__ */