• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/sh/include/asm/
1#ifndef __ASM_SH_CMPXCHG_GRB_H
2#define __ASM_SH_CMPXCHG_GRB_H
3
4static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
5{
6	unsigned long retval;
7
8	__asm__ __volatile__ (
9		"   .align 2              \n\t"
10		"   mova    1f,   r0      \n\t" /* r0 = end point */
11		"   nop                   \n\t"
12		"   mov    r15,   r1      \n\t" /* r1 = saved sp */
13		"   mov    #-4,   r15     \n\t" /* LOGIN */
14		"   mov.l  @%1,   %0      \n\t" /* load  old value */
15		"   mov.l   %2,   @%1     \n\t" /* store new value */
16		"1: mov     r1,   r15     \n\t" /* LOGOUT */
17		: "=&r" (retval),
18		  "+r"  (m)
19		: "r"   (val)
20		: "memory", "r0", "r1");
21
22	return retval;
23}
24
25static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
26{
27	unsigned long retval;
28
29	__asm__ __volatile__ (
30		"   .align  2             \n\t"
31		"   mova    1f,   r0      \n\t" /* r0 = end point */
32		"   mov    r15,   r1      \n\t" /* r1 = saved sp */
33		"   mov    #-6,   r15     \n\t" /* LOGIN */
34		"   mov.b  @%1,   %0      \n\t" /* load  old value */
35		"   extu.b  %0,   %0      \n\t" /* extend as unsigned */
36		"   mov.b   %2,   @%1     \n\t" /* store new value */
37		"1: mov     r1,   r15     \n\t" /* LOGOUT */
38		: "=&r" (retval),
39		  "+r"  (m)
40		: "r"   (val)
41		: "memory" , "r0", "r1");
42
43	return retval;
44}
45
46static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
47					  unsigned long new)
48{
49	unsigned long retval;
50
51	__asm__ __volatile__ (
52		"   .align  2             \n\t"
53		"   mova    1f,   r0      \n\t" /* r0 = end point */
54		"   nop                   \n\t"
55		"   mov    r15,   r1      \n\t" /* r1 = saved sp */
56		"   mov    #-8,   r15     \n\t" /* LOGIN */
57		"   mov.l  @%1,   %0      \n\t" /* load  old value */
58		"   cmp/eq  %0,   %2      \n\t"
59		"   bf            1f      \n\t" /* if not equal */
60		"   mov.l   %3,   @%1     \n\t" /* store new value */
61		"1: mov     r1,   r15     \n\t" /* LOGOUT */
62		: "=&r" (retval)
63		:  "r"  (m), "r"  (old), "r"  (new)
64		: "memory" , "r0", "r1", "t");
65
66	return retval;
67}
68
69#endif /* __ASM_SH_CMPXCHG_GRB_H */
70