/* Test the LDAR instruction generation from atomic acquire loads. */ /* { dg-do assemble } */ /* { dg-additional-options "--save-temps -O1" } */ /* { dg-final { check-function-bodies "**" "" "" } } */ #include #pragma GCC target "+norcpc" uint8_t v_uint8_t; uint16_t v_uint16_t; uint32_t v_uint32_t; uint64_t v_uint64_t; /* ** load_uint8_t: ** ... ** ldarb w0, \[x[0-9]+\] ** ret */ uint8_t load_uint8_t (void) { return __atomic_load_n (&v_uint8_t, __ATOMIC_ACQUIRE); } /* ** load_uint16_t: ** ... ** ldarh w0, \[x[0-9]+\] ** ret */ uint16_t load_uint16_t (void) { return __atomic_load_n (&v_uint16_t, __ATOMIC_ACQUIRE); } /* ** load_uint32_t: ** ... ** ldar w0, \[x[0-9]+\] ** ret */ uint32_t load_uint32_t (void) { return __atomic_load_n (&v_uint32_t, __ATOMIC_ACQUIRE); } /* ** load_uint64_t: ** ... ** ldar x0, \[x[0-9]+\] ** ret */ uint64_t load_uint64_t (void) { return __atomic_load_n (&v_uint64_t, __ATOMIC_ACQUIRE); }