https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103069
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> --- nptl/pthread_mutex_unlock.c in glibc has: do { newval = oldval & PTHREAD_MUTEX_PRIO_CEILING_MASK; } while (!atomic_compare_exchange_weak_release (&mutex->__data.__lock, &oldval, newval)); GCC 12 generates: 90a81: 41 89 c0 mov %eax,%r8d 90a84: 41 81 e0 00 00 f8 ff and $0xfff80000,%r8d 90a8b: f0 44 0f b1 07 lock cmpxchg %r8d,(%rdi) 90a90: 75 ef jne 90a81 <__pthread_mutex_unlock_ful l+0x81>