Module Name:    src
Committed By:   martin
Date:           Tue Feb 18 16:19:28 UTC 2014

Modified Files:
        src/common/lib/libc/arch/m68k/atomic: atomic_add.S atomic_cas.S
            atomic_swap.S

Log Message:
Add a few __sync_* and atomic functions.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/arch/m68k/atomic/atomic_add.S \
    src/common/lib/libc/arch/m68k/atomic/atomic_swap.S
cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/arch/m68k/atomic/atomic_cas.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/m68k/atomic/atomic_add.S
diff -u src/common/lib/libc/arch/m68k/atomic/atomic_add.S:1.6 src/common/lib/libc/arch/m68k/atomic/atomic_add.S:1.7
--- src/common/lib/libc/arch/m68k/atomic/atomic_add.S:1.6	Tue Jul 16 23:24:18 2013
+++ src/common/lib/libc/arch/m68k/atomic/atomic_add.S	Tue Feb 18 16:19:28 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: atomic_add.S,v 1.6 2013/07/16 23:24:18 matt Exp $	*/
+/*	$NetBSD: atomic_add.S,v 1.7 2014/02/18 16:19:28 martin Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -66,3 +66,28 @@ ATOMIC_OP_ALIAS(atomic_add_long_nv,_atom
 STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_32_nv)
 ATOMIC_OP_ALIAS(atomic_add_ptr_nv,_atomic_add_32_nv)
 STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_32_nv)
+STRONG_ALIAS(__sync_add_and_fetch_4,_atomic_add_32_nv)
+
+ENTRY(_atomic_add_16_nv)
+	movl	4(%sp), %a0
+1:	movw	(%a0), %d0
+	movw	%d0, %d1
+	addw	8(%sp), %d0
+	casw	%d1, %d0, (%a0)
+	bne	1b
+	rts
+END(_atomic_add_16_nv)
+
+STRONG_ALIAS(__sync_add_and_fetch_2,_atomic_add_16_nv)
+
+ENTRY(_atomic_add_8_nv)
+	movl	4(%sp), %a0
+1:	movb	(%a0), %d0
+	movb	%d0, %d1
+	addb	8(%sp), %d0
+	casb	%d1, %d0, (%a0)
+	bne	1b
+	rts
+END(_atomic_add_8_nv)
+
+STRONG_ALIAS(__sync_add_and_fetch_1,_atomic_add_8_nv)
Index: src/common/lib/libc/arch/m68k/atomic/atomic_swap.S
diff -u src/common/lib/libc/arch/m68k/atomic/atomic_swap.S:1.6 src/common/lib/libc/arch/m68k/atomic/atomic_swap.S:1.7
--- src/common/lib/libc/arch/m68k/atomic/atomic_swap.S:1.6	Tue Jul 16 23:24:18 2013
+++ src/common/lib/libc/arch/m68k/atomic/atomic_swap.S	Tue Feb 18 16:19:28 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: atomic_swap.S,v 1.6 2013/07/16 23:24:18 matt Exp $	*/
+/*	$NetBSD: atomic_swap.S,v 1.7 2014/02/18 16:19:28 martin Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -50,3 +50,29 @@ ATOMIC_OP_ALIAS(atomic_swap_ulong,_atomi
 STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_32)
 ATOMIC_OP_ALIAS(atomic_swap_ptr,_atomic_swap_32)
 STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_32)
+STRONG_ALIAS(__sync_lock_test_and_set_4,_atomic_swap_32)
+
+
+ENTRY(_atomic_swap_16)
+	movl	4(%sp), %a0
+1:	movw	(%a0), %d0
+	movw	8(%sp), %d1
+	casw	%d0, %d1, (%a0)
+	bne	1b
+	/* %d0 now contains the old value */
+	rts
+END(_atomic_swap_16)
+ATOMIC_OP_ALIAS(atomic_swap_16,_atomic_swap_16)
+STRONG_ALIAS(__sync_lock_test_and_set_2,_atomic_swap_16)
+
+ENTRY(_atomic_swap_8)
+	movl	4(%sp), %a0
+1:	movb	(%a0), %d0
+	movb	8(%sp), %d1
+	casb	%d0, %d1, (%a0)
+	bne	1b
+	/* %d0 now contains the old value */
+	rts
+END(_atomic_swap_8)
+ATOMIC_OP_ALIAS(atomic_swap_8,_atomic_swap_8)
+STRONG_ALIAS(__sync_lock_test_and_set_1,_atomic_swap_8)

Index: src/common/lib/libc/arch/m68k/atomic/atomic_cas.S
diff -u src/common/lib/libc/arch/m68k/atomic/atomic_cas.S:1.7 src/common/lib/libc/arch/m68k/atomic/atomic_cas.S:1.8
--- src/common/lib/libc/arch/m68k/atomic/atomic_cas.S:1.7	Tue Jul 16 23:24:18 2013
+++ src/common/lib/libc/arch/m68k/atomic/atomic_cas.S	Tue Feb 18 16:19:28 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: atomic_cas.S,v 1.7 2013/07/16 23:24:18 matt Exp $	*/
+/*	$NetBSD: atomic_cas.S,v 1.8 2014/02/18 16:19:28 martin Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
@@ -50,6 +50,7 @@ ATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic
 STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32)
 ATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_32)
 STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32)
+STRONG_ALIAS(__sync_val_compare_and_swap_4,_atomic_cas_32)
 
 ATOMIC_OP_ALIAS(atomic_cas_32_ni,_atomic_cas_32)
 STRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_32)
@@ -59,3 +60,71 @@ ATOMIC_OP_ALIAS(atomic_cas_ulong_ni,_ato
 STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_32)
 ATOMIC_OP_ALIAS(atomic_cas_ptr_ni,_atomic_cas_32)
 STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_32)
+
+ENTRY(__sync_bool_compare_and_swap_4)
+	movl	4(%sp), %a0
+	movl	8(%sp), %d3
+	movl	%d3, %d2
+	movl	12(%sp), %d1
+	casl	%d3, %d1, (%a0)
+	/* %d3 now contains the old value */
+	clrl	%d0	/* assume it did not work */
+	cmpl	%d3, %d2
+	bne	1f
+	movl	#1, %d0	/* return success */
+1:	rts
+END(__sync_bool_compare_and_swap_4)
+
+ENTRY(_atomic_cas_16)
+	movl	4(%sp), %a0
+	movw	8(%sp), %d0
+	movw	10(%sp), %d1
+	casw	%d0, %d1, (%a0)
+	/* %d0 now contains the old value */
+	rts
+END(_atomic_cas_16)
+
+ATOMIC_OP_ALIAS(atomic_cas_16,_atomic_cas_16)
+STRONG_ALIAS(__sync_val_compare_and_swap_2,_atomic_cas_16)
+
+ENTRY(__sync_bool_compare_and_swap_2)
+	movl	4(%sp), %a0
+	movw	8(%sp), %d3
+	movw	%d3, %d2
+	movw	10(%sp), %d1
+	casw	%d3, %d1, (%a0)
+	/* %d3 now contains the old value */
+	clrl	%d0	/* assume it did not work */
+	cmpw	%d3, %d2
+	bne	1f
+	movl	#1, %d0	/* return success */
+1:	rts
+END(__sync_bool_compare_and_swap_2)
+
+ENTRY(_atomic_cas_8)
+	movl	4(%sp), %a0
+	movb	8(%sp), %d0
+	movb	9(%sp), %d1
+	casb	%d0, %d1, (%a0)
+	/* %d0 now contains the old value */
+	rts
+END(_atomic_cas_8)
+
+ATOMIC_OP_ALIAS(atomic_cas_8,_atomic_cas_8)
+STRONG_ALIAS(__sync_val_compare_and_swap_1,_atomic_cas_8)
+
+
+ENTRY(__sync_bool_compare_and_swap_1)
+	movl	4(%sp), %a0
+	movb	8(%sp), %d3
+	movb	%d3, %d2
+	movb	9(%sp), %d1
+	casb	%d3, %d1, (%a0)
+	/* %d3 now contains the old value */
+	clrl	%d0	/* assume it did not work */
+	cmpb	%d3, %d2
+	bne	1f
+	movl	#1, %d0	/* return success */
+1:	rts
+END(__sync_bool_compare_and_swap_1)
+

Reply via email to