Add atomic_cas_foo_ni().

This commit is contained in:
ad 2008-02-10 13:25:46 +00:00
parent 49e2be8b76
commit cc655ebd16
2 changed files with 42 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: atomic.S,v 1.8 2008/02/09 13:42:21 ad Exp $ */
/* $NetBSD: atomic.S,v 1.9 2008/02/10 13:25:46 ad Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@ -147,6 +147,14 @@ NENTRY(_atomic_cas_32)
/* %eax now contains the old value */
ret
NENTRY(_atomic_cas_32_ni)
movl 4(%esp), %edx
movl 8(%esp), %eax
movl 12(%esp), %ecx
cmpxchgl %ecx, (%edx)
/* %eax now contains the old value */
ret
NENTRY(_membar_consumer)
LOCK(13)
addl $0, -4(%esp)
@ -299,7 +307,13 @@ ALIAS(atomic_cas_uint,_atomic_cas_32)
ALIAS(atomic_cas_ulong,_atomic_cas_32)
ALIAS(atomic_cas_ptr,_atomic_cas_32)
ALIAS(atomic_cas_32_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_ulong_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_ptr_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_64,_atomic_cas_64)
ALIAS(atomic_cas_64_ni,_atomic_cas_64)
ALIAS(membar_consumer,_membar_consumer)
ALIAS(membar_producer,_membar_producer)
@ -355,5 +369,9 @@ STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32)
STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32)
STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32)
STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni)
STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_32_ni)
STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_32_ni)
STRONG_ALIAS(_membar_enter,_membar_consumer)
STRONG_ALIAS(_membar_exit,_membar_producer)

View File

@ -1,4 +1,4 @@
/* $NetBSD: atomic.S,v 1.8 2008/02/09 13:42:21 ad Exp $ */
/* $NetBSD: atomic.S,v 1.9 2008/02/10 13:25:46 ad Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@ -132,6 +132,12 @@ NENTRY(_atomic_cas_32)
/* %eax now contains the old value */
ret
NENTRY(_atomic_cas_32_ni)
movl %esi, %eax
cmpxchgl %edx, (%rdi)
/* %eax now contains the old value */
ret
/* 64-bit */
NENTRY(_atomic_add_64)
@ -214,6 +220,12 @@ NENTRY(_atomic_cas_64)
/* %eax now contains the old value */
ret
NENTRY(_atomic_cas_64_ni)
movq %rsi, %rax
cmpxchgq %rdx, (%rdi)
/* %eax now contains the old value */
ret
/* memory barriers */
NENTRY(_membar_consumer)
@ -326,6 +338,12 @@ ALIAS(atomic_cas_uint,_atomic_cas_32)
ALIAS(atomic_cas_ulong,_atomic_cas_64)
ALIAS(atomic_cas_ptr,_atomic_cas_64)
ALIAS(atomic_cas_32_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_64_ni,_atomic_cas_64_ni)
ALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni)
ALIAS(atomic_cas_ulong_ni,_atomic_cas_64_ni)
ALIAS(atomic_cas_ptr_ni,_atomic_cas_64_ni)
ALIAS(membar_consumer,_membar_consumer)
ALIAS(membar_producer,_membar_producer)
ALIAS(membar_enter,_membar_consumer)
@ -380,5 +398,9 @@ STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32)
STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64)
STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64)
STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni)
STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64_ni)
STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64_ni)
STRONG_ALIAS(_membar_enter,_membar_consumer)
STRONG_ALIAS(_membar_exit,_membar_producer)