# 1 "p.c" # 1 "/home/andrea/kernel/devel/2.2.18pre9aa1/include/linux/spinlock.h" 1 # 1 "/usr/include/asm/spinlock.h" 1 3 # 134 "/usr/include/asm/spinlock.h" 3 typedef struct { volatile unsigned int lock; } spinlock_t; typedef struct { unsigned long a[100]; } __dummy_lock_t; # 169 "/usr/include/asm/spinlock.h" 3 typedef struct { volatile unsigned int lock; unsigned long previous; } rwlock_t; # 231 "/usr/include/asm/spinlock.h" 3 # 249 "/usr/include/asm/spinlock.h" 3 # 3 "/home/andrea/kernel/devel/2.2.18pre9aa1/include/linux/spinlock.h" 2 # 1 "p.c" 2 int * p; spinlock_t lock = (spinlock_t) { 0 } ; void dummy(int x , int y) {} main() { int a, b; __asm__ __volatile__( "\n1:\t" "lock ; btsl $0,%0\n\t" "jc 2f\n" ".section .text.lock,\"ax\"\n" "2:\t" "testb $1,%0\n\t" "jne 2b\n\t" "jmp 1b\n" ".previous" :"=m" ((*(__dummy_lock_t *)( &lock )) )) ; a = *p; __asm__ __volatile__( "lock ; btrl $0,%0" :"=m" ((*(__dummy_lock_t *)( &lock )) )) ; __asm__ __volatile__( "\n1:\t" "lock ; btsl $0,%0\n\t" "jc 2f\n" ".section .text.lock,\"ax\"\n" "2:\t" "testb $1,%0\n\t" "jne 2b\n\t" "jmp 1b\n" ".previous" :"=m" ((*(__dummy_lock_t *)( &lock )) )) ; b = *p; __asm__ __volatile__( "lock ; btrl $0,%0" :"=m" ((*(__dummy_lock_t *)( &lock )) )) ; dummy(a,b); }