[BACK]Return to atomic_xor.S CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / common / lib / libc / arch / m68k / atomic

Annotation of src/common/lib/libc/arch/m68k/atomic/atomic_xor.S, Revision 1.4

1.4     ! riastrad    1: /*     $NetBSD: atomic_xor.S,v 1.3 2014/06/23 21:53:45 joerg Exp $     */
1.1       martin      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.
1.4     ! riastrad   18:  *
1.1       martin     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:
                     36: ENTRY(_atomic_xor_32)
                     37:        movl    4(%sp), %a0
                     38:        movl    8(%sp), %d0
                     39:        eorl    %d0, (%a0)
                     40:        rts
                     41: END(_atomic_xor_32)
                     42:
                     43: ATOMIC_OP_ALIAS(atomic_xor_32,_atomic_xor_32)
                     44: ATOMIC_OP_ALIAS(atomic_xor_uint,_atomic_xor_32)
                     45: STRONG_ALIAS(_atomic_xor_uint,_atomic_xor_32)
                     46: ATOMIC_OP_ALIAS(atomic_xor_ulong,_atomic_xor_32)
                     47: STRONG_ALIAS(_atomic_xor_ulong,_atomic_xor_32)
                     48: ATOMIC_OP_ALIAS(atomic_xor_ptr,_atomic_xor_32)
                     49: STRONG_ALIAS(_atomic_xor_ptr,_atomic_xor_32)
                     50:
                     51: ENTRY(_atomic_xor_32_nv)
                     52:        movl    4(%sp), %a0
                     53: 1:     movl    (%a0), %d0
                     54:        movl    %d0, %d1
                     55:        movl    8(%sp), %d2
                     56:        eorl    %d2, %d0
                     57:        casl    %d1, %d0, (%a0)
                     58:        bne     1b
                     59:        movl    %d0, %a0
                     60:        rts
                     61: END(_atomic_xor_32_nv)
                     62:
                     63: ATOMIC_OP_ALIAS(atomic_xor_32_nv,_atomic_xor_32_nv)
                     64: ATOMIC_OP_ALIAS(atomic_xor_uint_nv,_atomic_xor_32_nv)
                     65: STRONG_ALIAS(_atomic_xor_uint_nv,_atomic_xor_32_nv)
                     66: ATOMIC_OP_ALIAS(atomic_xor_ulong_nv,_atomic_xor_32_nv)
                     67: STRONG_ALIAS(_atomic_xor_ulong_nv,_atomic_xor_32_nv)
                     68: ATOMIC_OP_ALIAS(atomic_xor_ptr_nv,_atomic_xor_32_nv)
                     69: STRONG_ALIAS(_atomic_xor_ptr_nv,_atomic_xor_32_nv)
1.2       martin     70: CRT_ALIAS(__sync_xor_and_fetch_4, _atomic_xor_32_nv)
1.1       martin     71:
                     72:
                     73: ENTRY(__sync_fetch_and_xor_4)
                     74:        movl    4(%sp), %a0
                     75: 1:     movl    (%a0), %d0
                     76:        movl    %d0, %d1
                     77:        movl    8(%sp), %d2
                     78:        eorl    %d2, %d1
                     79:        casl    %d0, %d1, (%a0)
                     80:        bne     1b
                     81:        movl    %d0, %a0
                     82:        rts
                     83: END(__sync_fetch_and_xor_4)
                     84:
                     85:
                     86: ENTRY(_atomic_xor_16_nv)
                     87:        movl    4(%sp), %a0
                     88: 1:     movw    (%a0), %d0
                     89:        movw    %d0, %d1
                     90:        movw    8(%sp), %d2
                     91:        eorw    %d2, %d0
                     92:        casw    %d1, %d0, (%a0)
                     93:        bne     1b
                     94:        rts
                     95: END(_atomic_xor_16_nv)
1.2       martin     96: CRT_ALIAS(__sync_xor_and_fetch_2, _atomic_xor_16_nv)
1.1       martin     97:
                     98: ENTRY(__sync_fetch_and_xor_2)
                     99:        movl    4(%sp), %a0
                    100: 1:     movw    (%a0), %d0
                    101:        movw    %d0, %d1
                    102:        movw    8(%sp), %d2
                    103:        eorw    %d2, %d1
                    104:        casw    %d0, %d1, (%a0)
                    105:        bne     1b
                    106:        rts
                    107: END(__sync_fetch_and_xor_2)
                    108:
                    109:
                    110: ENTRY(_atomic_xor_8_nv)
                    111:        movl    4(%sp), %a0
                    112: 1:     movb    (%a0), %d0
                    113:        movb    %d0, %d1
                    114:        movb    8(%sp), %d2
                    115:        eorb    %d2, %d0
                    116:        casb    %d1, %d0, (%a0)
                    117:        bne     1b
                    118:        rts
                    119: END(_atomic_xor_8_nv)
1.2       martin    120: CRT_ALIAS(__sync_xor_and_fetch_1, _atomic_xor_8_nv)
1.1       martin    121:
                    122: ENTRY(__sync_fetch_and_xor_1)
                    123:        movl    4(%sp), %a0
                    124: 1:     movb    (%a0), %d0
                    125:        movb    %d0, %d1
                    126:        movb    8(%sp), %d2
                    127:        eorb    %d2, %d1
                    128:        casb    %d0, %d1, (%a0)
                    129:        bne     1b
                    130:        rts
                    131: END(__sync_fetch_and_xor_1)
1.3       joerg     132:
                    133: CRT_ALIAS(__atomic_fetch_xor_1,__sync_fetch_and_xor_1)
                    134: CRT_ALIAS(__atomic_fetch_xor_2,__sync_fetch_and_xor_2)
                    135: CRT_ALIAS(__atomic_fetch_xor_4,__sync_fetch_and_xor_4)

CVSweb <webmaster@jp.NetBSD.org>