atomic_arch.h 609 B

123456789101112131415161718192021222324252627282930
  1. #define a_cas a_cas
  2. static inline int a_cas(volatile int *p, int t, int s)
  3. {
  4. __asm__ __volatile__ (
  5. "cs %0, %2, %1"
  6. : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc");
  7. return t;
  8. }
  9. #define a_cas_p a_cas_p
  10. static inline void *a_cas_p(volatile void *p, void *t, void *s)
  11. {
  12. __asm__ __volatile__ (
  13. "csg %0, %2, %1"
  14. : "+d"(t), "+Q"(*(void *volatile *)p) : "d"(s)
  15. : "memory", "cc");
  16. return t;
  17. }
  18. #define a_barrier a_barrier
  19. static inline void a_barrier()
  20. {
  21. __asm__ __volatile__ ("bcr 15,0" : : : "memory");
  22. }
  23. #define a_crash a_crash
  24. static inline void a_crash()
  25. {
  26. __asm__ __volatile__ (".insn e,0");
  27. }