https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878

            Bug ID: 80878
           Summary: -mcx16 (enable 128 bit CAS) on x86_64 seems not to
                    work
           Product: gcc
           Version: 7.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: admin_public at liblfds dot org
  Target Milestone: ---

Hi.

I've been building GCC compilers, starting with 4.1.2 up till 7.1.0, on a
couple of platforms.  It's hard to do, and I'm really not good at it, and I
think it practically certain this bug is really me messing things up, rather
than there being an actual real bug, except that when I switch to 6.2.0, which
I built in exactly the same way (I've written a script), the problem goes away.

The problem is that the compiler when compiling reports "undefined reference to
`__atomic_compare_exchange_16'".

I have reduced this down to a short test program, thus;

#include <stdio.h>
#include <stdlib.h>

int main( void );

int main()
{
  __uint128_t
    compare = 1,
    exchange = 2,
    target = 1;

  printf( "target before = %llu\n", (int long long unsigned) target );

  __atomic_compare_exchange( &target, &compare, &exchange, 1, __ATOMIC_SEQ_CST,
__ATOMIC_SEQ_CST );

  printf( "target after = %llu\n", (int long long unsigned) target );

  return EXIT_SUCCESS;
}

I compile this with;

gcc -Wall -march=native -mtune=native -mcx16 test.c

With GCC 6.2.0, the output is;

./a.out 
target before = 1
target after = 2

With GCC 7.1.0, the output is;

/tmp/ccjMRvw1.o: In function `main':
test.c:(.text+0x75): undefined reference to `__atomic_compare_exchange_16'
collect2: error: ld returned 1 exit status

This is the same error 6.2.0 gives if I omit "-mcx16".

Reply via email to