1c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#ifndef _ASM_M32R_CMPXCHG_H
2c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define _ASM_M32R_CMPXCHG_H
3c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
4c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells/*
5c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells *  M32R version:
6c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells *    Copyright (C) 2001, 2002  Hitoshi Yamamoto
7c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells *    Copyright (C) 2004  Hirokazu Takata <takata at linux-m32r.org>
8c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells */
9c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
10c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#include <linux/irqflags.h>
11c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#include <asm/assembler.h>
12c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#include <asm/dcache_clear.h>
13c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
14c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsextern void  __xchg_called_with_bad_pointer(void);
15c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
16c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic __always_inline unsigned long
17c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells__xchg(unsigned long x, volatile void *ptr, int size)
18c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
19c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long flags;
20c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long tmp = 0;
21c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
22c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_save(flags);
23c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
24c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	switch (size) {
25c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#ifndef CONFIG_SMP
26c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 1:
27c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
28c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ldb	%0, @%2 \n\t"
29c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"stb	%1, @%2 \n\t"
30c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
31c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
32c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 2:
33c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
34c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ldh	%0, @%2 \n\t"
35c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"sth	%1, @%2 \n\t"
36c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
37c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
38c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 4:
39c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
40c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ld	%0, @%2 \n\t"
41c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"st	%1, @%2 \n\t"
42c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
43c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
44c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#else  /* CONFIG_SMP */
45c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 4:
46c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
47c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			DCACHE_CLEAR("%0", "r4", "%2")
48c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"lock	%0, @%2;	\n\t"
49c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"unlock	%1, @%2;	\n\t"
50c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr)
51c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "memory"
52c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#ifdef CONFIG_CHIP_M32700_TS1
53c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			, "r4"
54c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif	/* CONFIG_CHIP_M32700_TS1 */
55c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		);
56c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
57c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif  /* CONFIG_SMP */
58c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	default:
59c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__xchg_called_with_bad_pointer();
60c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	}
61c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
62c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_restore(flags);
63c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
64c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return (tmp);
65c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
66c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
67c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define xchg(ptr, x)							\
68c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr))))
69c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
70c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic __always_inline unsigned long
71c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells__xchg_local(unsigned long x, volatile void *ptr, int size)
72c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
73c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long flags;
74c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long tmp = 0;
75c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
76c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_save(flags);
77c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
78c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	switch (size) {
79c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 1:
80c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
81c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ldb	%0, @%2 \n\t"
82c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"stb	%1, @%2 \n\t"
83c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
84c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
85c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 2:
86c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
87c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ldh	%0, @%2 \n\t"
88c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"sth	%1, @%2 \n\t"
89c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
90c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
91c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 4:
92c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__asm__ __volatile__ (
93c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ld	%0, @%2 \n\t"
94c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"st	%1, @%2 \n\t"
95c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (tmp) : "r" (x), "r" (ptr) : "memory");
96c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		break;
97c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	default:
98c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		__xchg_called_with_bad_pointer();
99c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	}
100c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
101c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_restore(flags);
102c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
103c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return (tmp);
104c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
105c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
106c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define xchg_local(ptr, x)						\
107c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	((__typeof__(*(ptr)))__xchg_local((unsigned long)(x), (ptr),	\
108c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			sizeof(*(ptr))))
109c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
110c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define __HAVE_ARCH_CMPXCHG	1
111c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
112c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic inline unsigned long
113c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells__cmpxchg_u32(volatile unsigned int *p, unsigned int old, unsigned int new)
114c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
115c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long flags;
116c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned int retval;
117c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
118c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_save(flags);
119c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	__asm__ __volatile__ (
120c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			DCACHE_CLEAR("%0", "r4", "%1")
121c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			M32R_LOCK" %0, @%1;	\n"
122c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"	bne	%0, %2, 1f;	\n"
123c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			M32R_UNLOCK" %3, @%1;	\n"
124c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"	bra	2f;		\n"
125c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells                "       .fillinsn		\n"
126c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"1:"
127c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			M32R_UNLOCK" %0, @%1;	\n"
128c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells                "       .fillinsn		\n"
129c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"2:"
130c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (retval)
131c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "r" (p), "r" (old), "r" (new)
132c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "cbit", "memory"
133c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#ifdef CONFIG_CHIP_M32700_TS1
134c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			, "r4"
135c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif  /* CONFIG_CHIP_M32700_TS1 */
136c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		);
137c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_restore(flags);
138c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
139c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return retval;
140c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
141c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
142c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic inline unsigned long
143c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells__cmpxchg_local_u32(volatile unsigned int *p, unsigned int old,
144c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			unsigned int new)
145c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
146c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned long flags;
147c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	unsigned int retval;
148c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
149c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_save(flags);
150c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	__asm__ __volatile__ (
151c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			DCACHE_CLEAR("%0", "r4", "%1")
152c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"ld %0, @%1;		\n"
153c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"	bne	%0, %2, 1f;	\n"
154c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"st %3, @%1;		\n"
155c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"	bra	2f;		\n"
156c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"       .fillinsn		\n"
157c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"1:"
158c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			"st %0, @%1;		\n"
159c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"       .fillinsn		\n"
160c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		"2:"
161c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "=&r" (retval)
162c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "r" (p), "r" (old), "r" (new)
163c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			: "cbit", "memory"
164c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#ifdef CONFIG_CHIP_M32700_TS1
165c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			, "r4"
166c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif  /* CONFIG_CHIP_M32700_TS1 */
167c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		);
168c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	local_irq_restore(flags);
169c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
170c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return retval;
171c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
172c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
173c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells/* This function doesn't exist, so you'll get a linker error
174c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells   if something tries to do an invalid cmpxchg().  */
175c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsextern void __cmpxchg_called_with_bad_pointer(void);
176c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
177c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic inline unsigned long
178c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
179c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
180c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	switch (size) {
181c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 4:
182c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		return __cmpxchg_u32(ptr, old, new);
183c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#if 0	/* we don't have __cmpxchg_u64 */
184c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 8:
185c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		return __cmpxchg_u64(ptr, old, new);
186c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif /* 0 */
187c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	}
188c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	__cmpxchg_called_with_bad_pointer();
189c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return old;
190c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
191c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
192c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define cmpxchg(ptr, o, n)						 \
193c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	((__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)(o),	 \
194c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			(unsigned long)(n), sizeof(*(ptr))))
195c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
196c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#include <asm-generic/cmpxchg-local.h>
197c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
198c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howellsstatic inline unsigned long __cmpxchg_local(volatile void *ptr,
199c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells				      unsigned long old,
200c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells				      unsigned long new, int size)
201c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells{
202c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	switch (size) {
203c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	case 4:
204c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		return __cmpxchg_local_u32(ptr, old, new);
205c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	default:
206c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells		return __cmpxchg_local_generic(ptr, old, new, size);
207c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	}
208c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
209c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	return old;
210c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells}
211c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
212c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells/*
213c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
214c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells * them available.
215c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells */
216c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define cmpxchg_local(ptr, o, n)				  	    \
217c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells	((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o),	    \
218c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells			(unsigned long)(n), sizeof(*(ptr))))
219c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
220c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells
221c9034c3a1d67486284b3b569595a4bd377aaf8ccDavid Howells#endif /* _ASM_M32R_CMPXCHG_H */
222