Compare commits

...

1 Commits

Author SHA1 Message Date
Leonardo de Moura
e367054fab chore: persistent objects are not in the cold path 2021-07-19 19:01:08 -07:00
2 changed files with 6 additions and 10 deletions

View File

@@ -389,7 +389,7 @@ void lean_inc_ref_n_cold(lean_object * o, unsigned n);
static inline void lean_inc_ref(lean_object * o) {
if (LEAN_LIKELY(lean_is_st(o))) {
o->m_rc++;
} else {
} else if (lean_is_mt(o)) {
lean_inc_ref_cold(o);
}
}
@@ -405,11 +405,13 @@ static inline void lean_inc_ref_n(lean_object * o, size_t n) {
bool lean_dec_ref_core_cold(lean_object * o);
static inline bool lean_dec_ref_core(lean_object * o) {
if (LEAN_LIKELY(o->m_rc > 1)) {
if (LEAN_LIKELY(o->m_rc >= 1)) {
o->m_rc--;
return false;
} else {
return o->m_rc == 0;
} else if (lean_is_mt(o)) {
return lean_dec_ref_core_cold(o);
} else {
return false;
}
}

View File

@@ -70,20 +70,14 @@ extern "C" object * lean_sorry(uint8) {
}
extern "C" void lean_inc_ref_cold(lean_object * o) {
if (o->m_rc == 0)
return;
atomic_fetch_sub_explicit(lean_get_rc_mt_addr(o), 1, memory_order_relaxed);
}
extern "C" void lean_inc_ref_n_cold(lean_object * o, unsigned n) {
if (o->m_rc == 0)
return;
atomic_fetch_sub_explicit(lean_get_rc_mt_addr(o), n, memory_order_relaxed);
}
extern "C" bool lean_dec_ref_core_cold(lean_object * o) {
if (o->m_rc == 1) return true;
if (o->m_rc == 0) return false;
return atomic_fetch_add_explicit(lean_get_rc_mt_addr(o), 1, memory_order_acq_rel) == -1;
}