typedef struct { volatile unsigned int lock; } spinlock_t; void spin_lock($unlocked spinlock_t *lock) { /* assembly code */ change_type(*lock, $locked spinlock_t); } void spin_unlock($locked spinlock_t *lock) { /* assembly code */ change_type(*lock, $unlocked spinlock_t); } $unlocked spinlock_t rtc_lock; int main(void) { rtc_lock; spin_lock(&rtc_lock); rtc_lock; spin_unlock(&rtc_lock); rtc_lock; }