@@ -5956,6 +5956,10 @@ class StubGenerator: public StubCodeGenerator {
5956
5956
acquire = false ;
5957
5957
release = false ;
5958
5958
break ;
5959
+ case memory_order_release:
5960
+ acquire = false ;
5961
+ release = true ;
5962
+ break ;
5959
5963
default :
5960
5964
acquire = true ;
5961
5965
release = true ;
@@ -6037,6 +6041,20 @@ class StubGenerator: public StubCodeGenerator {
6037
6041
(_masm, &aarch64_atomic_cmpxchg_8_relaxed_impl);
6038
6042
gen_cas_entry (MacroAssembler::xword, memory_order_relaxed);
6039
6043
6044
+ AtomicStubMark mark_cmpxchg_4_release
6045
+ (_masm, &aarch64_atomic_cmpxchg_4_release_impl);
6046
+ gen_cas_entry (MacroAssembler::word, memory_order_release);
6047
+ AtomicStubMark mark_cmpxchg_8_release
6048
+ (_masm, &aarch64_atomic_cmpxchg_8_release_impl);
6049
+ gen_cas_entry (MacroAssembler::xword, memory_order_release);
6050
+
6051
+ AtomicStubMark mark_cmpxchg_4_seq_cst
6052
+ (_masm, &aarch64_atomic_cmpxchg_4_seq_cst_impl);
6053
+ gen_cas_entry (MacroAssembler::word, memory_order_seq_cst);
6054
+ AtomicStubMark mark_cmpxchg_8_seq_cst
6055
+ (_masm, &aarch64_atomic_cmpxchg_8_seq_cst_impl);
6056
+ gen_cas_entry (MacroAssembler::xword, memory_order_seq_cst);
6057
+
6040
6058
ICache::invalidate_range (first_entry, __ pc () - first_entry);
6041
6059
}
6042
6060
#endif // LINUX
@@ -7203,6 +7221,10 @@ DEFAULT_ATOMIC_OP(cmpxchg, 8, )
7203
7221
DEFAULT_ATOMIC_OP(cmpxchg, 1 , _relaxed)
7204
7222
DEFAULT_ATOMIC_OP(cmpxchg, 4 , _relaxed)
7205
7223
DEFAULT_ATOMIC_OP(cmpxchg, 8 , _relaxed)
7224
+ DEFAULT_ATOMIC_OP(cmpxchg, 4 , _release)
7225
+ DEFAULT_ATOMIC_OP(cmpxchg, 8 , _release)
7226
+ DEFAULT_ATOMIC_OP(cmpxchg, 4 , _seq_cst)
7227
+ DEFAULT_ATOMIC_OP(cmpxchg, 8 , _seq_cst)
7206
7228
7207
7229
#undef DEFAULT_ATOMIC_OP
7208
7230
0 commit comments