|----------------------------------------------------------------------------------------------| | | arch_xchg_release | arch_cmpxchg_release | __smp_store_release | | |-----------------------------------------------------------------------------------------| | | zabha | !zabha | zabha+zacas | !(zabha+zacas) | zalasr | !zalasr | | rl |-----------------------------------------------------------------------------------------| | | | (fence rw, w) | | (fence rw, w) | | fence rw, w | | | amoswap.rl | lr.w | amocas.rl | lr.w | s{b|h|w|d}.rl | s{b|h|w|d} | | | | sc.w.rl | | sc.w.rl | | | |----------------------------------------------------------------------------------------------| | | arch_xchg_acquire | arch_cmpxchg_acquire | __smp_load_acquire | | |-----------------------------------------------------------------------------------------| | | zabha | !zabha | zabha+zacas | !(zabha+zacas) | zalasr | !zalasr | | aq |-----------------------------------------------------------------------------------------| | | | lr.w.aq | | lr.w.aq | | l{b|h|w|d} | | | amoswap.aq | sc.w | amocas.aq | sc.w | l{b|h|w|d}.aq | fence r, rw | | | | (fence r, rw) | | (fence r, rw) | | | |----------------------------------------------------------------------------------------------| (fence rw, w), (fence r, rw) here means such instructions will only be inserted when zalasr is not implemented.