Index: ch/amd64/include/atomic.h
===================================================================
--- arch/amd64/include/atomic.h	(revision be56c17fb7a40db7401fc109228679d3c7c5cb40)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * Copyright (C) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __amd64_ATOMIC_H__
-#define __amd64_ATOMIC_H__
-
-
-static inline void atomic_inc(volatile int *val) {
-#ifdef __SMP__
-	__asm__ volatile ("lock incl (%0)\n" : : "r" (val));
-#else
-	__asm__ volatile ("incl (%0)\n" : : "r" (val));
-#endif /* __SMP__ */
-}
-
-static inline void atomic_dec(volatile int *val) {
-#ifdef __SMP__
-	__asm__ volatile ("lock decl (%0)\n" : : "r" (val));
-#else
-	__asm__ volatile ("decl (%0)\n" : : "r" (val));
-#endif /* __SMP__ */
-}
-
-#endif
Index: arch/ia32/include/atomic.h
===================================================================
--- arch/ia32/include/atomic.h	(revision be56c17fb7a40db7401fc109228679d3c7c5cb40)
+++ arch/ia32/include/atomic.h	(revision 345ce2fc7293223840cfc34607aa079518b6ec9c)
@@ -34,7 +34,7 @@
 static inline void atomic_inc(volatile int *val) {
 #ifdef __SMP__
-	__asm__ volatile ("lock incl (%0)\n" : : "r" (val));
+	__asm__ volatile ("lock incl %0\n" : "=m" (*val));
 #else
-	__asm__ volatile ("incl (%0)\n" : : "r" (val));
+	__asm__ volatile ("incl %0\n" : "=m" (*val));
 #endif /* __SMP__ */
 }
@@ -42,7 +42,7 @@
 static inline void atomic_dec(volatile int *val) {
 #ifdef __SMP__
-	__asm__ volatile ("lock decl (%0)\n" : : "r" (val));
+	__asm__ volatile ("lock decl %0\n" : "=m" (*val));
 #else
-	__asm__ volatile ("decl (%0)\n" : : "r" (val));
+	__asm__ volatile ("decl %0\n" : "=m" (*val));
 #endif /* __SMP__ */
 }
@@ -53,7 +53,6 @@
 	__asm__ volatile (
 		"movl $1, %0\n"
-		"xchgl %0, (%1)\n"
-		: "=r" (v)
-		: "r" (val)
+		"xchgl %0, %1\n"
+		: "=r" (v),"=m" (*val)
 	);
 	
Index: src/build.amd64
===================================================================
--- src/build.amd64	(revision be56c17fb7a40db7401fc109228679d3c7c5cb40)
+++ src/build.amd64	(revision 345ce2fc7293223840cfc34607aa079518b6ec9c)
@@ -16,5 +16,5 @@
 done
 
-for a in ega.h i8042.h i8259.h i8254.h interrupt.h bios mm/memory_init.h boot/memmap.h boot/memmapasm.h; do
+for a in atomic.h ega.h i8042.h i8259.h i8254.h interrupt.h bios mm/memory_init.h boot/memmap.h boot/memmapasm.h; do
   if [ \! -e amd64/include/$a ]; then
     echo ln -sf `pwd`/ia32/include/$a amd64/include/$a
