--- /dev/null
+ .section .text
+
+ .global spinlock_lock
+ .global spinlock_trylock
+ .global spinlock_unlock
+
+spinlock_lock:
+ movl 4(%esp), %edx
+0: xorl %eax, %eax
+ movl $1, %ecx
+ lock
+ cmpxchgl %ecx, (%edx)
+ jnz 0b /* lock failed */
+ ret /* lock succeeded */
+
+spinlock_trylock:
+ movl 4(%esp), %edx
+ xorl %eax, %eax
+ movl $1, %ecx
+ lock
+ cmpxchgl %ecx, (%edx)
+ ret
+
+spinlock_unlock:
+ movl 4(%esp), %edx
+ xorl %eax, %eax
+ lock
+ xchgl %eax, (%edx)
+ ret
+
+ /* 序でにamd64の実装
+
+spinlock_lock:
+ xorq %rax, %rax
+ movl $1, %ecx
+ lock
+ cmpxchgl %ecx, (%rdi)
+ jnz spinlock_lock
+ ret
+
+spinlock_trylock:
+ xorl %rax, %rax
+ movl $1, %ecx
+ lock
+ cmpxchgl %ecx, (%rdi)
+ ret
+
+spinlock_unlock:
+ xorq %rax, %rax
+ lock
+ xchgl %eax, (%rdi)
+ ret
+
+ */