11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ASM_IA64_ATOMIC_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ASM_IA64_ATOMIC_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Atomic operations that C can't guarantee us.  Useful for
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * resource counting etc..
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NOTE: don't mess with the types below!  The "unsigned long" and
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * "int" types were carefully placed so as to ensure proper operation
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the macros.
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1998, 1999, 2002-2003 Hewlett-Packard Co
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	David Mosberger-Tang <davidm@hpl.hp.com>
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/intrinsics.h>
180cd64efb61f1e68be26bd5121ccff3c779dc488bPeter Zijlstra#include <asm/barrier.h>
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21a119365586b0130dfea06457f584953e0ff6481dTony Luck#define ATOMIC_INIT(i)		{ (i) }
22a119365586b0130dfea06457f584953e0ff6481dTony Luck#define ATOMIC64_INIT(i)	{ (i) }
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
242291059c852706c6f5ffb400366042b7625066cdPranith Kumar#define atomic_read(v)		ACCESS_ONCE((v)->counter)
252291059c852706c6f5ffb400366042b7625066cdPranith Kumar#define atomic64_read(v)	ACCESS_ONCE((v)->counter)
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_set(v,i)		(((v)->counter) = (i))
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_set(v,i)	(((v)->counter) = (i))
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define ATOMIC_OP(op, c_op)						\
3108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstrastatic __inline__ int							\
3208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstraia64_atomic_##op (int i, atomic_t *v)					\
3308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra{									\
3408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	__s32 old, new;							\
3508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	CMPXCHG_BUGCHECK_DECL						\
3608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra									\
3708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	do {								\
3808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		CMPXCHG_BUGCHECK(v);					\
3908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		old = atomic_read(v);					\
4008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		new = old c_op i;					\
4108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	} while (ia64_cmpxchg(acq, v, old, new, sizeof(atomic_t)) != old); \
4208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	return new;							\
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4508be2dab191431f23f5f98ba2db76513d0d853e7Peter ZijlstraATOMIC_OP(add, +)
4608be2dab191431f23f5f98ba2db76513d0d853e7Peter ZijlstraATOMIC_OP(sub, -)
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#undef ATOMIC_OP
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic_add_return(i,v)						\
5108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra({									\
5208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	int __ia64_aar_i = (i);						\
5308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	(__builtin_constant_p(i)					\
5408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	 && (   (__ia64_aar_i ==  1) || (__ia64_aar_i ==   4)		\
5508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i ==  8) || (__ia64_aar_i ==  16)		\
5608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i == -1) || (__ia64_aar_i ==  -4)		\
5708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i == -8) || (__ia64_aar_i == -16)))		\
5808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		? ia64_fetch_and_add(__ia64_aar_i, &(v)->counter)	\
5908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		: ia64_atomic_add(__ia64_aar_i, v);			\
6008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra})
6108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
6208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic_sub_return(i,v)						\
6308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra({									\
6408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	int __ia64_asr_i = (i);						\
6508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	(__builtin_constant_p(i)					\
6608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	 && (   (__ia64_asr_i ==   1) || (__ia64_asr_i ==   4)		\
6708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==   8) || (__ia64_asr_i ==  16)		\
6808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==  -1) || (__ia64_asr_i ==  -4)		\
6908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==  -8) || (__ia64_asr_i == -16)))	\
7008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		? ia64_fetch_and_add(-__ia64_asr_i, &(v)->counter)	\
7108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		: ia64_atomic_sub(__ia64_asr_i, v);			\
7208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra})
7308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
7408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define ATOMIC64_OP(op, c_op)						\
7508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstrastatic __inline__ long							\
7608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstraia64_atomic64_##op (__s64 i, atomic64_t *v)				\
7708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra{									\
7808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	__s64 old, new;							\
7908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	CMPXCHG_BUGCHECK_DECL						\
8008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra									\
8108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	do {								\
8208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		CMPXCHG_BUGCHECK(v);					\
8308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		old = atomic64_read(v);					\
8408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		new = old c_op i;					\
8508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	} while (ia64_cmpxchg(acq, v, old, new, sizeof(atomic64_t)) != old); \
8608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	return new;							\
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8908be2dab191431f23f5f98ba2db76513d0d853e7Peter ZijlstraATOMIC64_OP(add, +)
9008be2dab191431f23f5f98ba2db76513d0d853e7Peter ZijlstraATOMIC64_OP(sub, -)
9108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
9208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#undef ATOMIC64_OP
9308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
9408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic64_add_return(i,v)					\
9508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra({									\
9608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	long __ia64_aar_i = (i);					\
9708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	(__builtin_constant_p(i)					\
9808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	 && (   (__ia64_aar_i ==  1) || (__ia64_aar_i ==   4)		\
9908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i ==  8) || (__ia64_aar_i ==  16)		\
10008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i == -1) || (__ia64_aar_i ==  -4)		\
10108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_aar_i == -8) || (__ia64_aar_i == -16)))		\
10208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		? ia64_fetch_and_add(__ia64_aar_i, &(v)->counter)	\
10308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		: ia64_atomic64_add(__ia64_aar_i, v);			\
10408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra})
10508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
10608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic64_sub_return(i,v)					\
10708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra({									\
10808be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	long __ia64_asr_i = (i);					\
10908be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	(__builtin_constant_p(i)					\
11008be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	 && (   (__ia64_asr_i ==   1) || (__ia64_asr_i ==   4)		\
11108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==   8) || (__ia64_asr_i ==  16)		\
11208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==  -1) || (__ia64_asr_i ==  -4)		\
11308be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra	     || (__ia64_asr_i ==  -8) || (__ia64_asr_i == -16)))	\
11408be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		? ia64_fetch_and_add(-__ia64_asr_i, &(v)->counter)	\
11508be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra		: ia64_atomic64_sub(__ia64_asr_i, v);			\
11608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra})
11708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra
118819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers#define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new))
119ffbf670f5cd50501a34a5187981460da2216071eIngo Molnar#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
1204a6dae6d382e9edf3ff440b819e554ed706359bcNick Piggin
121819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers#define atomic64_cmpxchg(v, old, new) \
122819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers	(cmpxchg(&((v)->counter), old, new))
123819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
124819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers
125f24219b4e90cf70ec4a211b17fbabc725a0ddf3cArun Sharmastatic __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
1262856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers{
1272856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	int c, old;
1282856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	c = atomic_read(v);
1292856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	for (;;) {
1302856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		if (unlikely(c == (u)))
1312856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers			break;
1322856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		old = atomic_cmpxchg((v), c, c + (a));
1332856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		if (likely(old == c))
1342856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers			break;
1352856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		c = old;
1362856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	}
137f24219b4e90cf70ec4a211b17fbabc725a0ddf3cArun Sharma	return c;
1382856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers}
1392856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers
1408426e1f6af0fd7f44d040af7263750c5a52f3cc3Nick Piggin
14101d69a82e1d3c938da16bf55aab000672243aa24Tony Luckstatic __inline__ long atomic64_add_unless(atomic64_t *v, long a, long u)
1422856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers{
1432856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	long c, old;
1442856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	c = atomic64_read(v);
1452856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	for (;;) {
1462856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		if (unlikely(c == (u)))
1472856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers			break;
1482856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		old = atomic64_cmpxchg((v), c, c + (a));
1492856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		if (likely(old == c))
1502856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers			break;
1512856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers		c = old;
1522856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	}
1532856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers	return c != (u);
1542856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers}
1552856f5e31c1413bf6e4f1371e07e17078a5fee5eMathieu Desnoyers
156819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
157819791319becde19e32788a34cc2556aef9f9e6dMathieu Desnoyers
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Atomically add I to V and return TRUE if the resulting value is
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * negative.
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic __inline__ int
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsatomic_add_negative (int i, atomic_t *v)
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return atomic_add_return(i, v) < 0;
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
16801d69a82e1d3c938da16bf55aab000672243aa24Tony Luckstatic __inline__ long
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsatomic64_add_negative (__s64 i, atomic64_t *v)
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return atomic64_add_return(i, v) < 0;
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_dec_return(v)		atomic_sub_return(1, (v))
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_inc_return(v)		atomic_add_return(1, (v))
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_dec_return(v)		atomic64_sub_return(1, (v))
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_inc_return(v)		atomic64_add_return(1, (v))
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_sub_and_test(i,v)	(atomic_sub_return((i), (v)) == 0)
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_dec_and_test(v)		(atomic_sub_return(1, (v)) == 0)
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_inc_and_test(v)		(atomic_add_return(1, (v)) == 0)
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_sub_and_test(i,v)	(atomic64_sub_return((i), (v)) == 0)
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_dec_and_test(v)	(atomic64_sub_return(1, (v)) == 0)
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_inc_and_test(v)	(atomic64_add_return(1, (v)) == 0)
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
18608be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic_add(i,v)			(void)atomic_add_return((i), (v))
18708be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic_sub(i,v)			(void)atomic_sub_return((i), (v))
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_inc(v)			atomic_add(1, (v))
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic_dec(v)			atomic_sub(1, (v))
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19108be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic64_add(i,v)		(void)atomic64_add_return((i), (v))
19208be2dab191431f23f5f98ba2db76513d0d853e7Peter Zijlstra#define atomic64_sub(i,v)		(void)atomic64_sub_return((i), (v))
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_inc(v)			atomic64_add(1, (v))
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define atomic64_dec(v)			atomic64_sub(1, (v))
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _ASM_IA64_ATOMIC_H */
197