/* Supply a set of generic atomic functions to test the compiler make the calls properly. */ /* { dg-do compile } */ /* { dg-options "-w" } */ /* Test that the generic builtins make calls as expected. */ #include #include #include void __atomic_exchange (size_t size, void *obj, void *val, void *ret, int model) { /* Copy old value into *ret. */ memcpy (ret, obj, size); /* Copy val into object. */ memcpy (obj, val, size); } /* Note that the external version of this routine has the boolean weak/strong parameter removed. This is required by the external library. */ bool __atomic_compare_exchange (size_t size, void *obj, void *expected, void *desired, int model1, int model2) { bool ret; if (!memcmp (obj, expected, size)) { memcpy (obj, desired, size); ret = true; } else { memcpy (expected, obj, size); ret = false; } /* Make sure the parameters have been properly adjusted for the external function call (no weak/strong parameter. */ if (model1 != __ATOMIC_SEQ_CST || model2 != __ATOMIC_ACQUIRE) ret = !ret; return ret; } void __atomic_load (size_t size, void *obj, void *ret, int model) { memcpy (ret, obj, size); } void __atomic_store (size_t size, void *obj, void *val, int model) { memcpy (obj, val, size); }