123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #ifndef _PT_MACHINE_H
- #define _PT_MACHINE_H 1
- #include <features.h>
- #ifndef PT_EI
- # define PT_EI __extern_always_inline
- #endif
- #include <asm/fixed_code.h>
- PT_EI long int
- testandset (int *spinlock)
- {
- long int res;
- __asm__ __volatile__ (
- "CALL (%4);"
- : "=q0" (res), "=m" (*spinlock)
- : "qA" (spinlock), "m" (*spinlock), "a" (ATOMIC_XCHG32), "q1" (1)
- : "RETS", "cc", "memory");
- return res;
- }
- #define HAS_COMPARE_AND_SWAP
- PT_EI int
- __compare_and_swap (long int *p, long int oldval, long int newval)
- {
- long int readval;
- __asm__ __volatile__ (
- "CALL (%5);"
- : "=q0" (readval), "=m" (*p)
- : "qA" (p),
- "q1" (oldval),
- "q2" (newval),
- "a" (ATOMIC_CAS32),
- "m" (*p)
- : "RETS", "memory", "cc");
- return readval == oldval;
- }
- #ifdef SHARED
- # define PTHREAD_STATIC_FN_REQUIRE(name)
- #else
- # define PTHREAD_STATIC_FN_REQUIRE(name) __asm__ (".globl " "_"#name);
- #endif
- #endif
|