133965Sjdp/* $NetBSD: atomic_cas.S,v 1.4 2008/04/28 20:22:51 martin Exp $ */ 233965Sjdp 333965Sjdp/*- 433965Sjdp * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. 533965Sjdp * All rights reserved. 689857Sobrien * 733965Sjdp * This code is derived from software contributed to The NetBSD Foundation 833965Sjdp * by Jason R. Thorpe. 933965Sjdp * 1033965Sjdp * Redistribution and use in source and binary forms, with or without 1133965Sjdp * modification, are permitted provided that the following conditions 1233965Sjdp * are met: 1333965Sjdp * 1. Redistributions of source code must retain the above copyright 1433965Sjdp * notice, this list of conditions and the following disclaimer. 1533965Sjdp * 2. Redistributions in binary form must reproduce the above copyright 1633965Sjdp * notice, this list of conditions and the following disclaimer in the 1733965Sjdp * documentation and/or other materials provided with the distribution. 1833965Sjdp * 1933965Sjdp * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2033965Sjdp * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21218822Sdim * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2233965Sjdp * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2333965Sjdp * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2433965Sjdp * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2533965Sjdp * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2633965Sjdp * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2733965Sjdp * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2833965Sjdp * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29130561Sobrien * POSSIBILITY OF SUCH DAMAGE. 30130561Sobrien */ 3133965Sjdp 3233965Sjdp#include "atomic_op_asm.h" 3333965Sjdp 3489857Sobrien .text 3589857Sobrien 3633965SjdpLEAF(_atomic_cas_32, 3) 37218822Sdim1: mov a2, t2 3833965Sjdp ldl_l v0, 0(a0) 3933965Sjdp cmpeq v0, a1, t1 4033965Sjdp beq t1, 2f 4133965Sjdp stl_c t2, 0(a0) 4233965Sjdp beq t2, 3f 4333965Sjdp2: RET 4433965Sjdp3: br 1b 4533965Sjdp END(_atomic_cas_32) 4633965Sjdp 4733965SjdpATOMIC_OP_ALIAS(atomic_cas_32,_atomic_cas_32) 4833965SjdpATOMIC_OP_ALIAS(atomic_cas_uint,_atomic_cas_32) 4933965SjdpSTRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32) 5033965Sjdp 5133965SjdpATOMIC_OP_ALIAS(atomic_cas_32_ni,_atomic_cas_32) 5233965SjdpSTRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_32) 5333965SjdpATOMIC_OP_ALIAS(atomic_cas_uint_ni,_atomic_cas_32) 5433965SjdpSTRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32) 5589857Sobrien 5689857SobrienLEAF(_atomic_cas_64, 3) 571: mov a2, t2 58 ldq_l v0, 0(a0) 59 cmpeq v0, a1, t1 60 beq t1, 2f 61 stq_c t2, 0(a0) 62 beq t2, 3f 632: RET 643: br 1b 65 END(_atomic_cas_64) 66 67ATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64) 68ATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_64) 69STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64) 70ATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_64) 71STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64) 72 73ATOMIC_OP_ALIAS(atomic_cas_64_ni,_atomic_cas_64) 74STRONG_ALIAS(_atomic_cas_64_ni,_atomic_cas_64) 75ATOMIC_OP_ALIAS(atomic_cas_ulong_ni,_atomic_cas_64) 76STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64) 77ATOMIC_OP_ALIAS(atomic_cas_ptr_ni,_atomic_cas_64) 78STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64) 79