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:

Reply via email to