1*09ff5f3bSriastradh/* $NetBSD: atomic_cas.S,v 1.6 2022/04/06 22:47:55 riastradh Exp $ */ 2fb900ec9Sad 3fb900ec9Sad/*- 4646fc3baSad * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. 5fb900ec9Sad * All rights reserved. 6fb900ec9Sad * 7fb900ec9Sad * This code is derived from software contributed to The NetBSD Foundation 8fb900ec9Sad * by Jason R. Thorpe. 9fb900ec9Sad * 10fb900ec9Sad * Redistribution and use in source and binary forms, with or without 11fb900ec9Sad * modification, are permitted provided that the following conditions 12fb900ec9Sad * are met: 13fb900ec9Sad * 1. Redistributions of source code must retain the above copyright 14fb900ec9Sad * notice, this list of conditions and the following disclaimer. 15fb900ec9Sad * 2. Redistributions in binary form must reproduce the above copyright 16fb900ec9Sad * notice, this list of conditions and the following disclaimer in the 17fb900ec9Sad * documentation and/or other materials provided with the distribution. 18fb900ec9Sad * 19fb900ec9Sad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20fb900ec9Sad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21fb900ec9Sad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22fb900ec9Sad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23fb900ec9Sad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24fb900ec9Sad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25fb900ec9Sad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26fb900ec9Sad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27fb900ec9Sad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28fb900ec9Sad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29fb900ec9Sad * POSSIBILITY OF SUCH DAMAGE. 30fb900ec9Sad */ 31fb900ec9Sad 32fb900ec9Sad#include "atomic_op_asm.h" 33fb900ec9Sad 34fb900ec9Sad .text 35fb900ec9Sad 366740bb54SchsLEAF(_atomic_cas_32, 3) 37fb900ec9Sad1: mov a2, t2 38fb900ec9Sad ldl_l v0, 0(a0) 39fb900ec9Sad cmpeq v0, a1, t1 40fb900ec9Sad beq t1, 2f 41fb900ec9Sad stl_c t2, 0(a0) 42fb900ec9Sad beq t2, 3f 43fb900ec9Sad2: RET 44fb900ec9Sad3: br 1b 45fb900ec9Sad END(_atomic_cas_32) 46646fc3baSad 47fb900ec9SadATOMIC_OP_ALIAS(atomic_cas_32,_atomic_cas_32) 48fb900ec9SadATOMIC_OP_ALIAS(atomic_cas_uint,_atomic_cas_32) 49fb900ec9SadSTRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32) 50fb900ec9Sad 51646fc3baSadATOMIC_OP_ALIAS(atomic_cas_32_ni,_atomic_cas_32) 52646fc3baSadSTRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_32) 53646fc3baSadATOMIC_OP_ALIAS(atomic_cas_uint_ni,_atomic_cas_32) 54646fc3baSadSTRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32) 55646fc3baSad 566740bb54SchsLEAF(_atomic_cas_64, 3) 57fb900ec9Sad1: mov a2, t2 58fb900ec9Sad ldq_l v0, 0(a0) 59fb900ec9Sad cmpeq v0, a1, t1 60fb900ec9Sad beq t1, 2f 61fb900ec9Sad stq_c t2, 0(a0) 62fb900ec9Sad beq t2, 3f 63fb900ec9Sad2: RET 64fb900ec9Sad3: br 1b 65fb900ec9Sad END(_atomic_cas_64) 66646fc3baSad 67fb900ec9SadATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64) 68fb900ec9SadATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_64) 69fb900ec9SadSTRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64) 70fb900ec9SadATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_64) 71fb900ec9SadSTRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64) 72646fc3baSad 73646fc3baSadATOMIC_OP_ALIAS(atomic_cas_64_ni,_atomic_cas_64) 74646fc3baSadSTRONG_ALIAS(_atomic_cas_64_ni,_atomic_cas_64) 75646fc3baSadATOMIC_OP_ALIAS(atomic_cas_ulong_ni,_atomic_cas_64) 76646fc3baSadSTRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64) 77646fc3baSadATOMIC_OP_ALIAS(atomic_cas_ptr_ni,_atomic_cas_64) 78646fc3baSadSTRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64) 79