Index: arch/amd64/include/atomic.h
===================================================================
--- arch/amd64/include/atomic.h	(revision 437e35a0ec3132b5c6687d2aaa994c9208be9aa9)
+++ arch/amd64/include/atomic.h	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -30,15 +30,20 @@
 #define __amd64_ATOMIC_H__
 
-/*
- * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
- * WARNING: the following functions cause the code to be preemption-unsafe !!!
- */
 
-static inline atomic_inc(volatile int *val) {
-	*val++;
+/* Count_t is 32-bits on AMD-64 */
+static inline void atomic_inc(volatile count_t *val) {
+#ifdef __SMP__
+	__asm__ volatile ("lock incl (%0)\n" : : "r" (val));
+#else
+	__asm__ volatile ("incl (%0)\n" : : "r" (val));
+#endif /* __SMP__ */
 }
 
-static inline atomic_dec(volatile int *val) {
-	*val--;
+static inline void atomic_dec(volatile count_t *val) {
+#ifdef __SMP__
+	__asm__ volatile ("lock decl (%0)\n" : : "r" (val));
+#else
+	__asm__ volatile ("decl (%0)\n" : : "r" (val));
+#endif /* __SMP__ */
 }
 
Index: arch/amd64/src/fmath.c
===================================================================
--- arch/amd64/src/fmath.c	(revision 437e35a0ec3132b5c6687d2aaa994c9208be9aa9)
+++ arch/amd64/src/fmath.c	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -123,5 +123,5 @@
 	fmath_ld_union.ldd[7]=((fmath_ld_union.ldd[7])&0x7f)|(sign<<7); // change 64th bit (IA32 is a little endian)
 	return fmath_ld_union.bf;
-*/	return 1.0
+*/	return 1.0;
 }
 
Index: arch/ia32/include/atomic.h
===================================================================
--- arch/ia32/include/atomic.h	(revision 437e35a0ec3132b5c6687d2aaa994c9208be9aa9)
+++ arch/ia32/include/atomic.h	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -32,5 +32,5 @@
 #include <arch/types.h>
 
-static inline void atomic_inc(volatile int *val) {
+static inline void atomic_inc(volatile count_t *val) {
 #ifdef __SMP__
 	__asm__ volatile ("lock incl (%0)\n" : : "r" (val));
@@ -40,5 +40,5 @@
 }
 
-static inline void atomic_dec(volatile int *val) {
+static inline void atomic_dec(volatile count_t *val) {
 #ifdef __SMP__
 	__asm__ volatile ("lock decl (%0)\n" : : "r" (val));
Index: src/proc/scheduler.c
===================================================================
--- src/proc/scheduler.c	(revision 437e35a0ec3132b5c6687d2aaa994c9208be9aa9)
+++ src/proc/scheduler.c	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -150,5 +150,5 @@
 		spinlock_unlock(&CPU->lock);
 
-		atomic_dec((int *) &nrdy);
+		atomic_dec(&nrdy);
 		r->n--;
 
Index: src/proc/thread.c
===================================================================
--- src/proc/thread.c	(revision 437e35a0ec3132b5c6687d2aaa994c9208be9aa9)
+++ src/proc/thread.c	(revision 73838ed8e5c99d4b785497a5fa7d0909fded4f9f)
@@ -137,5 +137,5 @@
 	spinlock_unlock(&r->lock);
 
-	atomic_inc((int *) &nrdy);
+	atomic_inc(&nrdy);
 	avg = nrdy / config.cpu_active;
 
