~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/csky/kernel/atomic.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
  3 
  4 #include <linux/linkage.h>
  5 #include <abi/entry.h>
  6 
  7 .text
  8 
  9 /*
 10  * int csky_cmpxchg(int oldval, int newval, int *ptr)
 11  *
 12  * If *ptr != oldval && return 1,
 13  * else *ptr = newval return 0.
 14  */
 15 ENTRY(csky_cmpxchg)
 16         USPTOKSP
 17 
 18         RD_MEH  a3
 19         WR_MEH  a3
 20 
 21         mfcr    a3, epc
 22         addi    a3, TRAP0_SIZE
 23 
 24         subi    sp, 16
 25         stw     a3, (sp, 0)
 26         mfcr    a3, epsr
 27         stw     a3, (sp, 4)
 28         mfcr    a3, usp
 29         stw     a3, (sp, 8)
 30 
 31         psrset  ee
 32 #ifdef CONFIG_CPU_HAS_LDSTEX
 33 1:
 34         ldex    a3, (a2)
 35         cmpne   a0, a3
 36         bt16    2f
 37         mov     a3, a1
 38         stex    a3, (a2)
 39         bez     a3, 1b
 40 2:
 41         sync.is
 42 #else
 43 GLOBAL(csky_cmpxchg_ldw)
 44         ldw     a3, (a2)
 45         cmpne   a0, a3
 46         bt16    3f
 47 GLOBAL(csky_cmpxchg_stw)
 48         stw     a1, (a2)
 49 3:
 50 #endif
 51         mvc     a0
 52         ldw     a3, (sp, 0)
 53         mtcr    a3, epc
 54         ldw     a3, (sp, 4)
 55         mtcr    a3, epsr
 56         ldw     a3, (sp, 8)
 57         mtcr    a3, usp
 58         addi    sp, 16
 59         KSPTOUSP
 60         rte
 61 END(csky_cmpxchg)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php