Annotation of src/common/lib/libc/arch/m68k/atomic/atomic_add.S, Revision 1.8
1.8 ! martin 1: /* $NetBSD: atomic_add.S,v 1.7 2014/02/18 16:19:28 martin Exp $ */
1.2 ad 2:
3: /*-
4: * Copyright (c) 2007 The NetBSD Foundation, Inc.
5: * All rights reserved.
6: *
7: * This code is derived from software contributed to The NetBSD Foundation
8: * by Jason R. Thorpe.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29: * POSSIBILITY OF SUCH DAMAGE.
30: */
31:
32: #include "atomic_op_asm.h"
33:
34: .text
35: .align 2
36:
1.4 chs 37: ENTRY(_atomic_add_32)
1.5 matt 38: movl 4(%sp), %a0
39: movl 8(%sp), %d0
1.6 matt 40: addl %d0, (%a0)
1.2 ad 41: rts
1.6 matt 42: END(_atomic_add_32)
1.2 ad 43: ATOMIC_OP_ALIAS(atomic_add_32,_atomic_add_32)
44: ATOMIC_OP_ALIAS(atomic_add_int,_atomic_add_32)
45: STRONG_ALIAS(_atomic_add_int,_atomic_add_32)
46: ATOMIC_OP_ALIAS(atomic_add_long,_atomic_add_32)
47: STRONG_ALIAS(_atomic_add_long,_atomic_add_32)
48: ATOMIC_OP_ALIAS(atomic_add_ptr,_atomic_add_32)
49: STRONG_ALIAS(_atomic_add_ptr,_atomic_add_32)
50:
1.4 chs 51: ENTRY(_atomic_add_32_nv)
1.5 matt 52: movl 4(%sp), %a0
53: 1: movl (%a0), %d0
1.2 ad 54: movl %d0, %d1
1.5 matt 55: addl 8(%sp), %d0
1.6 matt 56: casl %d1, %d0, (%a0)
1.2 ad 57: bne 1b
58: movl %d0, %a0 /* pointers return also in %a0 */
59: rts
1.6 matt 60: END(_atomic_add_32_nv)
61:
1.2 ad 62: ATOMIC_OP_ALIAS(atomic_add_32_nv,_atomic_add_32_nv)
63: ATOMIC_OP_ALIAS(atomic_add_int_nv,_atomic_add_32_nv)
64: STRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv)
65: ATOMIC_OP_ALIAS(atomic_add_long_nv,_atomic_add_32_nv)
66: STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_32_nv)
67: ATOMIC_OP_ALIAS(atomic_add_ptr_nv,_atomic_add_32_nv)
68: STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_32_nv)
1.7 martin 69: STRONG_ALIAS(__sync_add_and_fetch_4,_atomic_add_32_nv)
70:
1.8 ! martin 71: ENTRY(__sync_fetch_and_add_4)
! 72: movl 4(%sp), %a0
! 73: 1: movl (%a0), %d0
! 74: movl %d0, %d1
! 75: addl 8(%sp), %d1
! 76: casl %d0, %d1, (%a0)
! 77: bne 1b
! 78: movl %d0, %a0 /* pointers return also in %a0 */
! 79: rts
! 80: END(__sync_fetch_and_add_4)
! 81:
1.7 martin 82: ENTRY(_atomic_add_16_nv)
83: movl 4(%sp), %a0
84: 1: movw (%a0), %d0
85: movw %d0, %d1
86: addw 8(%sp), %d0
87: casw %d1, %d0, (%a0)
88: bne 1b
89: rts
90: END(_atomic_add_16_nv)
91:
92: STRONG_ALIAS(__sync_add_and_fetch_2,_atomic_add_16_nv)
93:
1.8 ! martin 94: ENTRY(__sync_fetch_and_add_2)
! 95: movl 4(%sp), %a0
! 96: 1: movw (%a0), %d0
! 97: movw %d0, %d1
! 98: addw 8(%sp), %d1
! 99: casw %d0, %d1, (%a0)
! 100: bne 1b
! 101: rts
! 102: END(__sync_fetch_and_add_2)
! 103:
1.7 martin 104: ENTRY(_atomic_add_8_nv)
105: movl 4(%sp), %a0
106: 1: movb (%a0), %d0
107: movb %d0, %d1
108: addb 8(%sp), %d0
109: casb %d1, %d0, (%a0)
110: bne 1b
111: rts
112: END(_atomic_add_8_nv)
113:
114: STRONG_ALIAS(__sync_add_and_fetch_1,_atomic_add_8_nv)
1.8 ! martin 115:
! 116: ENTRY(__sync_fetch_and_add_1)
! 117: movl 4(%sp), %a0
! 118: 1: movb (%a0), %d0
! 119: movb %d0, %d1
! 120: addb 8(%sp), %d1
! 121: casb %d0, %d1, (%a0)
! 122: bne 1b
! 123: rts
! 124: END(__sync_fetch_and_add_1)
CVSweb <webmaster@jp.NetBSD.org>