.text .align 4 .globl ink_atomic_swap .type ink_atomic_swap,@function .globl ink_atomic_swap_ptr .type ink_atomic_swap_ptr,@function ink_atomic_swap_ptr: ink_atomic_swap: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax movl 12(%ebp),%edx lock xchgl %edx,(%eax) movl %edx,%eax leave ret .align 4 .globl ink_atomic_swap64 .type ink_atomic_swap64,@function ink_atomic_swap64: pushl %ebp movl %esp,%ebp subl $4,%esp pushl %edi pushl %esi pushl %ebx movl 8(%ebp),%edi movl %edi,-4(%ebp) .align 4 Link_atomic_swap64: movl -4(%ebp),%ecx movl (%ecx),%ebx movl 4(%ecx),%esi pushl 16(%ebp) pushl 12(%ebp) pushl %esi pushl %ebx pushl %edi call ink_atomic_cas64 addl $20,%esp testl %eax,%eax je Link_atomic_swap64 movl %ebx,%eax movl %esi,%edx leal -16(%ebp),%esp popl %ebx popl %esi popl %edi leave ret .align 4 .globl ink_atomic_cas .type ink_atomic_cas,@function .globl ink_atomic_cas_ptr .type ink_atomic_cas_ptr,@function ink_atomic_cas_ptr: ink_atomic_cas: pushl %ebp movl %esp,%ebp pushl %ebx movl 8(%ebp),%ebx movl 12(%ebp),%eax movl 16(%ebp),%edx lock cmpxchg %edx,(%ebx) setz %al andl $255,%eax movl -4(%ebp),%ebx leave ret .align 4 .globl ink_atomic_increment64 .type ink_atomic_increment64,@function ink_atomic_increment64: pushl %ebp movl %esp,%ebp subl $20,%esp pushl %edi pushl %esi pushl %ebx movl 8(%ebp),%edi movl %edi,-4(%ebp) .align 4 Link_atomic_increment64: movl -4(%ebp),%ecx movl (%ecx),%ebx movl %ebx,-20(%ebp) movl 4(%ecx),%ebx movl %ebx,-16(%ebp) movl -20(%ebp),%ecx movl -16(%ebp),%ebx addl 12(%ebp),%ecx adcl 16(%ebp),%ebx movl %ecx,-12(%ebp) movl %ebx,-8(%ebp) pushl -8(%ebp) pushl -12(%ebp) pushl -16(%ebp) pushl -20(%ebp) pushl %edi call ink_atomic_cas64 addl $20,%esp testl %eax,%eax je Link_atomic_increment64 movl -20(%ebp),%eax movl -16(%ebp),%edx leal -32(%ebp),%esp popl %ebx popl %esi popl %edi leave ret .align 4 .globl ink_atomic_cas64 .type ink_atomic_cas64,@function ink_atomic_cas64: pushl %ebp movl %esp,%ebp pushl %edi pushl %ebx movl 8(%ebp),%edi movl 12(%ebp),%eax movl 16(%ebp),%edx movl 20(%ebp),%ebx movl 24(%ebp),%ecx lock cmpxchg8b (%edi) setz %al andl $255,%eax leal -8(%ebp),%esp popl %ebx popl %edi leave ret .align 4 .globl ink_atomic_increment .type ink_atomic_increment,@function .globl ink_atomic_increment_ptr .type ink_atomic_increment_ptr,@function ink_atomic_increment_ptr: ink_atomic_increment: pushl %ebp movl %esp,%ebp pushl %esi pushl %ebx movl 8(%ebp),%ebx movl 12(%ebp),%esi .align 4 Link_atomic_increment: movl (%ebx),%ecx leal (%esi,%ecx),%edx mov %ecx,%eax lock cmpxchg %edx,(%ebx) jnz Link_atomic_increment movl %ecx,%eax leal -8(%ebp),%esp popl %ebx popl %esi leave ret