Index: kernel/arch/ia64/include/atomic.h
===================================================================
--- kernel/arch/ia64/include/atomic.h	(revision 7038f55834b70c09d9b7e778acbd89c64f575274)
+++ kernel/arch/ia64/include/atomic.h	(revision ad4b32c27d1dabf316dc0754160b80961ffc093b)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia64	
+/** @addtogroup ia64
  * @{
  */
@@ -36,21 +36,4 @@
 #define KERN_ia64_ATOMIC_H_
 
-/** Atomic addition.
- *
- * @param val		Atomic value.
- * @param imm		Value to add.
- *
- * @return		Value before addition.
- */
-static inline long atomic_add(atomic_t *val, int imm)
-{
-	long v;
-
- 	asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v),
-	    "+m" (val->count) : "i" (imm));
- 
-	return v;
-}
-
 static inline uint64_t test_and_set(atomic_t *val)
 {
@@ -58,7 +41,8 @@
 		
 	asm volatile (
-		"movl %0 = 0x1;;\n"
-		"xchg8 %0 = %1, %0;;\n"
-		: "=r" (v), "+m" (val->count)
+		"movl %[v] = 0x1;;\n"
+		"xchg8 %[v] = %[count], %[v];;\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
 	);
 	
@@ -76,30 +60,74 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	atomic_add(val, 1);
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], 1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
 }
 
 static inline void atomic_dec(atomic_t *val)
 {
-	atomic_add(val, -1);
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], -1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
 }
 
 static inline long atomic_preinc(atomic_t *val)
 {
-	return atomic_add(val, 1) + 1;
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], 1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
+	
+	return (v + 1);
 }
 
 static inline long atomic_predec(atomic_t *val)
 {
-	return atomic_add(val, -1) - 1;
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], -1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
+	
+	return (v - 1);
 }
 
 static inline long atomic_postinc(atomic_t *val)
 {
-	return atomic_add(val, 1);
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], 1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
+	
+	return v;
 }
 
 static inline long atomic_postdec(atomic_t *val)
 {
-	return atomic_add(val, -1);
+	long v;
+	
+	asm volatile (
+		"fetchadd8.rel %[v] = %[count], -1\n"
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
+	);
+	
+	return v;
 }
 
