https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107713
Bug ID: 107713 Summary: Wrong implementation atomic_exchange<short> on LoongArch Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hejinyang at loongson dot cn Target Milestone: --- Created attachment 53905 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53905&action=edit preprocessed file Target: loongarch64-unknown-linux-gnu Configured with: ../configure --prefix=/usr --libdir=/usr/lib64 --build=x86_64-cross-linux-gnu --host=loongarch64-unknown-linux-gnu --target=loongarch64-unknown-linux-gnu --enable-__cxa_atexit --enable-threads=posix --with-system-zlib --enable-libstdcxx-time --enable-checking=release --with-build-sysroot=/opt/mylaos/sysroot --enable-default-pie --enable-languages=c,c++,fortran,objc,obj-c++,lto gcc version 13.0.0 20220801 (experimental) (GCC) test_of_sync_lock_test_and_set.c: char lock; char hello() { return __sync_lock_test_and_set (&lock, 1); } Cmdline: gcc test_of_sync_lock_test_and_set.c -S --save-temps Output Fragment: 1: ll.w $r12,$r16,0 and $r19,$r12,$r14 bne $r19,$r15,2f <--- Wrong and $r19,$r12,$r17 or $r19,$r19,$r18 sc.w $r19,$r16,0 beq $zero,$r19,1b b 3f 2: dbar 0x700 3: