1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* Test __atomic routines for existence and proper execution on 2 byte
- values with each valid memory model. */
- /* { dg-do run } */
- /* Test the execution of the __atomic_X builtin for a short. */
- extern void abort(void);
- short v, count, ret;
- int
- main ()
- {
- v = 0;
- count = 0;
- if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count)
- abort ();
- count++;
- if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count)
- abort ();
- count++;
- if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count)
- abort ();
- count++;
- if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count)
- abort ();
- count++;
- if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count)
- abort ();
- count++;
- /* Now test the generic version. */
- count++;
- __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED);
- if (ret != count - 1 || v != count)
- abort ();
- count++;
- __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE);
- if (ret != count - 1 || v != count)
- abort ();
- count++;
- __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE);
- if (ret != count - 1 || v != count)
- abort ();
- count++;
- __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL);
- if (ret != count - 1 || v != count)
- abort ();
- count++;
- __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST);
- if (ret != count - 1 || v != count)
- abort ();
- count++;
- return 0;
- }
|