1*09ff5f3bSriastradh/* $NetBSD: atomic_cas.S,v 1.10 2022/04/06 22:47:56 riastradh Exp $ */ 2bc7bf35cSad 3bc7bf35cSad/*- 4646fc3baSad * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. 5bc7bf35cSad * All rights reserved. 6bc7bf35cSad * 7bc7bf35cSad * This code is derived from software contributed to The NetBSD Foundation 8bc7bf35cSad * by Jason R. Thorpe. 9bc7bf35cSad * 10bc7bf35cSad * Redistribution and use in source and binary forms, with or without 11bc7bf35cSad * modification, are permitted provided that the following conditions 12bc7bf35cSad * are met: 13bc7bf35cSad * 1. Redistributions of source code must retain the above copyright 14bc7bf35cSad * notice, this list of conditions and the following disclaimer. 15bc7bf35cSad * 2. Redistributions in binary form must reproduce the above copyright 16bc7bf35cSad * notice, this list of conditions and the following disclaimer in the 17bc7bf35cSad * documentation and/or other materials provided with the distribution. 18bc7bf35cSad * 19bc7bf35cSad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20bc7bf35cSad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21bc7bf35cSad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22bc7bf35cSad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23bc7bf35cSad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24bc7bf35cSad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25bc7bf35cSad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26bc7bf35cSad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27bc7bf35cSad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28bc7bf35cSad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29bc7bf35cSad * POSSIBILITY OF SUCH DAMAGE. 30bc7bf35cSad */ 31bc7bf35cSad 32bc7bf35cSad#include "atomic_op_asm.h" 33bc7bf35cSad 34*09ff5f3bSriastradh__RCSID("$NetBSD: atomic_cas.S,v 1.10 2022/04/06 22:47:56 riastradh Exp $") 35bc7bf35cSad 36cf88c389Smatt .text 376740bb54SchsENTRY(_atomic_cas_32) 386dd4b41fSmatt mr %r10,%r3 396dd4b41fSmatt1: lwarx %r3,0,%r10 406dd4b41fSmatt cmpw %r3,%r4 416dd4b41fSmatt bnelr- 42fd255ae5Srin IBM405_ERRATA77_DCBT(0,%r10) 436dd4b41fSmatt stwcx. %r5,0,%r10 446dd4b41fSmatt beqlr+ 456dd4b41fSmatt b 1b 46cf88c389SmattEND(_atomic_cas_32) 47646fc3baSad 48bc7bf35cSadATOMIC_OP_ALIAS(atomic_cas_32,_atomic_cas_32) 49646fc3baSadATOMIC_OP_ALIAS(atomic_cas_32_ni,_atomic_cas_32) 50646fc3baSadSTRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_32) 516dd4b41fSmatt 526dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_uint,_atomic_cas_32) 53646fc3baSadATOMIC_OP_ALIAS(atomic_cas_uint_ni,_atomic_cas_32) 546dd4b41fSmatt 556dd4b41fSmattSTRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32) 56646fc3baSadSTRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32) 576dd4b41fSmatt 586dd4b41fSmatt#if defined(_LP64) 596dd4b41fSmattENTRY(_atomic_cas_64) 606dd4b41fSmatt mr %r10,%r3 616dd4b41fSmatt1: ldarx %r3,0,%r10 626dd4b41fSmatt cmpd %r3,%r4 636dd4b41fSmatt bnelr- 646dd4b41fSmatt stdcx. %r5,0,%r10 656dd4b41fSmatt beqlr+ 666dd4b41fSmatt b 1b 676dd4b41fSmattEND(_atomic_cas_64) 686dd4b41fSmatt 696dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64) 706dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_64_ni,_atomic_cas_64) 716dd4b41fSmattSTRONG_ALIAS(_atomic_cas_64_ni,_atomic_cas_64) 726dd4b41fSmatt 736dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_64) 746dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ulong_ni,_atomic_cas_64) 756dd4b41fSmatt 766dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_64) 776dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ptr_ni,_atomic_cas_64) 786dd4b41fSmatt 796dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64) 806dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64) 816dd4b41fSmatt 826dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64) 836dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64) 846dd4b41fSmatt#else 856dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_32) 86646fc3baSadATOMIC_OP_ALIAS(atomic_cas_ulong_ni,_atomic_cas_32) 876dd4b41fSmatt 886dd4b41fSmattATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_32) 89646fc3baSadATOMIC_OP_ALIAS(atomic_cas_ptr_ni,_atomic_cas_32) 906dd4b41fSmatt 916dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32) 926dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_32) 936dd4b41fSmatt 946dd4b41fSmattSTRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32) 95646fc3baSadSTRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_32) 96646fc3baSad#endif 97