[Bug target/96964] New: [nvptx] Implement __atomic_test_and_set

vries at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Sep 7 20:46:50 GMT 2020


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

            Bug ID: 96964
           Summary: [nvptx] Implement __atomic_test_and_set
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Currently __atomic_test_and_set for nvptx falls back onto the "Failing all
else, assume a single threaded environment and simply perform the operation"
case in expand_atomic_test_and_set, so it doesn't map onto an actual atomic
operation.

So, for test-case test.c:
...
int a;

int
main (void)
{
  int res = __atomic_test_and_set (&a, __ATOMIC_SEQ_CST);
  return res;
}
...
we get:
...
$ gcc test.c -S -o-
// BEGIN PREAMBLE
        .version        3.1
        .target sm_30
        .address_size 64
// END PREAMBLE


// BEGIN GLOBAL FUNCTION DECL: main
.visible .func (.param.u32 %value_out) main (.param.u32 %in_ar0, .param.u64
%in_ar1);

// BEGIN GLOBAL FUNCTION DEF: main
.visible .func (.param.u32 %value_out) main (.param.u32 %in_ar0, .param.u64
%in_ar1)
{
        .reg.u32 %value;
        .local .align 16 .b8 %frame_ar[16];
        .reg.u64 %frame;
        cvta.local.u64 %frame, %frame_ar;
        .reg.u32 %r22;
        .reg.u32 %r23;
        .reg.u32 %r24;
        .reg.u32 %r25;
        .reg.u32 %r26;
                ld.global.u8    %r25, [a];
                mov.u32 %r26, 1;
                st.global.u8    [a], %r26;
                cvt.u32.u8      %r22, %r25;
                st.u32  [%frame], %r22;
                ld.u32  %r23, [%frame];
                mov.u32 %r24, %r23;
                mov.u32 %value, %r24;
        st.param.u32    [%value_out], %value;
        ret;
}


// BEGIN GLOBAL VAR DEF: a
        .visible .global .align 4 .u32 a[1];
...


More information about the Gcc-bugs mailing list