[BACK]Return to atomic.h CVS log [TXT][DIR] Up to [local] / sys / arch / hppa / include

Annotation of sys/arch/hppa/include/atomic.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: atomic.h,v 1.3 2007/04/26 20:52:48 miod Exp $ */
                      2:
                      3: /* Public Domain */
                      4:
                      5: #ifndef __HPPA_ATOMIC_H__
                      6: #define __HPPA_ATOMIC_H__
                      7:
                      8: #if defined(_KERNEL)
                      9:
                     10: static __inline void
                     11: atomic_setbits_int(__volatile unsigned int *uip, unsigned int v)
                     12: {
                     13:        register_t eiem;
                     14:
                     15:        __asm __volatile("mfctl %%cr15, %0": "=r" (eiem));
                     16:        __asm __volatile("mtctl %r0, %cr15");
                     17:        *uip |= v;
                     18:        __asm __volatile("mtctl %0, %%cr15":: "r" (eiem));
                     19: }
                     20:
                     21: static __inline void
                     22: atomic_clearbits_int(__volatile unsigned int *uip, unsigned int v)
                     23: {
                     24:        register_t eiem;
                     25:
                     26:        __asm __volatile("mfctl %%cr15, %0": "=r" (eiem));
                     27:        __asm __volatile("mtctl %r0, %cr15");
                     28:        *uip &= ~v;
                     29:        __asm __volatile("mtctl %0, %%cr15":: "r" (eiem));
                     30: }
                     31:
                     32: static __inline void
                     33: atomic_setbits_long(__volatile unsigned long *uip, unsigned long v)
                     34: {
                     35:        register_t eiem;
                     36:
                     37:        __asm __volatile("mfctl %%cr15, %0": "=r" (eiem));
                     38:        __asm __volatile("mtctl %r0, %cr15");
                     39:        *uip |= v;
                     40:        __asm __volatile("mtctl %0, %%cr15":: "r" (eiem));
                     41: }
                     42:
                     43: static __inline void
                     44: atomic_clearbits_long(__volatile unsigned long *uip, unsigned long v)
                     45: {
                     46:        register_t eiem;
                     47:
                     48:        __asm __volatile("mfctl %%cr15, %0": "=r" (eiem));
                     49:        __asm __volatile("mtctl %r0, %cr15");
                     50:        *uip &= ~v;
                     51:        __asm __volatile("mtctl %0, %%cr15":: "r" (eiem));
                     52: }
                     53:
                     54: #endif /* defined(_KERNEL) */
                     55: #endif /* __HPPA_ATOMIC_H__ */

CVSweb