Index: uspace/lib/libc/arch/amd64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/amd64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -42,33 +42,28 @@
 #include <atomicdflt.h>
 
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incq %0\n" : "+m" (val->count));
+static inline void atomic_inc(atomic_t *val)
+{
+	asm volatile (
+		"lock incq %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decq %0\n" : "+m" (val->count));
+static inline void atomic_dec(atomic_t *val)
+{
+	asm volatile (
+		"lock decq %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r;
-
-	asm volatile (
-		"movq $1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "+m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
+	atomic_count_t r = 1;
 	
 	asm volatile (
-		"movq $-1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "+m" (val->count)
+		"lock xaddq %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -76,6 +71,19 @@
 }
 
-#define atomic_preinc(val) (atomic_postinc(val) + 1)
-#define atomic_predec(val) (atomic_postdec(val) - 1)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
+{
+	atomic_count_t r = -1;
+	
+	asm volatile (
+		"lock xaddq %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val)  (atomic_postinc(val) + 1)
+#define atomic_predec(val)  (atomic_postdec(val) - 1)
 
 #endif
Index: uspace/lib/libc/arch/amd64/include/types.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/amd64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/arm32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/arm32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcarm32	
+/** @addtogroup libcarm32
  * @{
  */
@@ -38,5 +38,5 @@
 
 #define LIBC_ARCH_ATOMIC_H_
-#define CAS 
+#define CAS
 
 #include <atomicdflt.h>
@@ -46,8 +46,8 @@
 extern uintptr_t *ras_page;
 
-static inline bool cas(atomic_t *val, long ov, long nv)
-{
-	long ret = 0;
-
+static inline bool cas(atomic_t *val, atomic_count_t ov, atomic_count_t nv)
+{
+	atomic_count_t ret = 0;
+	
 	/*
 	 * The following instructions between labels 1 and 2 constitute a
@@ -75,9 +75,11 @@
 		: "memory"
 	);
-
+	
 	ras_page[0] = 0;
-	asm volatile ("" ::: "memory");	
+	asm volatile (
+		"" ::: "memory"
+	);
 	ras_page[1] = 0xffffffff;
-
+	
 	return (bool) ret;
 }
@@ -89,9 +91,10 @@
  *
  * @return Value after addition.
- */
-static inline long atomic_add(atomic_t *val, int i)
-{
-	long ret = 0;
-
+ *
+ */
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
+{
+	atomic_count_t ret = 0;
+	
 	/*
 	 * The following instructions between labels 1 and 2 constitute a
@@ -115,9 +118,11 @@
 		: [imm] "r" (i)
 	);
-
+	
 	ras_page[0] = 0;
-	asm volatile ("" ::: "memory");	
+	asm volatile (
+		"" ::: "memory"
+	);
 	ras_page[1] = 0xffffffff;
-
+	
 	return ret;
 }
@@ -127,4 +132,5 @@
  *
  * @param val Variable to be incremented.
+ *
  */
 static inline void atomic_inc(atomic_t *val)
@@ -137,4 +143,5 @@
  *
  * @param val Variable to be decremented.
+ *
  */
 static inline void atomic_dec(atomic_t *val)
@@ -148,6 +155,7 @@
  * @param val Variable to be incremented.
  * @return    Value after incrementation.
- */
-static inline long atomic_preinc(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
@@ -159,6 +167,7 @@
  * @param val Variable to be decremented.
  * @return    Value after decrementation.
- */
-static inline long atomic_predec(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1);
@@ -170,6 +179,7 @@
  * @param val Variable to be incremented.
  * @return    Value before incrementation.
- */
-static inline long atomic_postinc(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1) - 1;
@@ -181,6 +191,7 @@
  * @param val Variable to be decremented.
  * @return    Value before decrementation.
- */
-static inline long atomic_postdec(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1) + 1;
Index: uspace/lib/libc/arch/arm32/include/types.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/arm32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -55,4 +55,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ia32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ia32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -40,33 +40,28 @@
 #include <atomicdflt.h>
 
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incl %0\n" : "+m" (val->count));
+static inline void atomic_inc(atomic_t *val)
+{
+	asm volatile (
+		"lock incl %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decl %0\n" : "+m" (val->count));
+static inline void atomic_dec(atomic_t *val)
+{
+	asm volatile (
+		"lock decl %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r;
-
-	asm volatile (
-		"movl $1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "+m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
+	atomic_count_t r = 1;
 	
 	asm volatile (
-		"movl $-1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "+m" (val->count)
+		"lock xaddl %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -74,6 +69,19 @@
 }
 
-#define atomic_preinc(val) (atomic_postinc(val) + 1)
-#define atomic_predec(val) (atomic_postdec(val) - 1)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
+{
+	atomic_count_t r = -1;
+	
+	asm volatile (
+		"lock xaddl %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val)  (atomic_postinc(val) + 1)
+#define atomic_predec(val)  (atomic_postdec(val) - 1)
 
 #endif
Index: uspace/lib/libc/arch/ia32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ia32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ia64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ia64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -42,5 +42,5 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -53,5 +53,5 @@
 static inline void atomic_dec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -62,7 +62,7 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -75,7 +75,7 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -88,7 +88,7 @@
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -101,7 +101,7 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
Index: uspace/lib/libc/arch/ia64/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ia64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -59,4 +59,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 typedef struct {
Index: uspace/lib/libc/arch/mips32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/mips32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,9 +27,9 @@
  */
 
-/** @addtogroup libcmips32	
+/** @addtogroup libcmips32
  * @{
  */
 /** @file
- * @ingroup libcmips32eb	
+ * @ingroup libcmips32eb
  */
 
@@ -41,24 +41,26 @@
 #include <atomicdflt.h>
 
-#define atomic_inc(x)	((void) atomic_add(x, 1))
-#define atomic_dec(x)	((void) atomic_add(x, -1))
+#define atomic_inc(x)  ((void) atomic_add(x, 1))
+#define atomic_dec(x)  ((void) atomic_add(x, -1))
 
-#define atomic_postinc(x) (atomic_add(x, 1) - 1)
-#define atomic_postdec(x) (atomic_add(x, -1) + 1)
+#define atomic_postinc(x)  (atomic_add(x, 1) - 1)
+#define atomic_postdec(x)  (atomic_add(x, -1) + 1)
 
-#define atomic_preinc(x) atomic_add(x, 1)
-#define atomic_predec(x) atomic_add(x, -1)
+#define atomic_preinc(x)  atomic_add(x, 1)
+#define atomic_predec(x)  atomic_add(x, -1)
 
 /* Atomic addition of immediate value.
  *
  * @param val Memory location to which will be the immediate value added.
- * @param i Signed immediate that will be added to *val.
+ * @param i   Signed immediate that will be added to *val.
  *
  * @return Value after addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	long tmp, v;
-
+	atomic_count_t tmp;
+	atomic_count_t v;
+	
 	asm volatile (
 		"1:\n"
@@ -70,8 +72,11 @@
 		/*	nop	*/		/* nop is inserted automatically by compiler */
 		"	nop\n"
-		: "=&r" (tmp), "+m" (val->count), "=&r" (v)
-		: "r" (i), "i" (0)
-		);
-
+		: "=&r" (tmp),
+		  "+m" (val->count),
+		  "=&r" (v)
+		: "r" (i),
+		  "i" (0)
+	);
+	
 	return v;
 }
Index: uspace/lib/libc/arch/mips32/include/types.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/mips32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcmips32	
+/** @addtogroup libcmips32
  * @{
  */
@@ -55,4 +55,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ppc32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ppc32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcppc32	
+/** @addtogroup libcppc32
  * @{
  */
@@ -42,6 +42,6 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
@@ -50,25 +50,31 @@
 		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
+		: "cc"
+	);
 }
 
 static inline void atomic_dec(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
 		"lwarx %0, 0, %2\n"
 		"addic %0, %0, -1\n"
-		"stwcx.	%0, 0, %2\n"
+		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
+		: "cc"
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -76,5 +82,5 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	atomic_dec(val);
@@ -82,5 +88,5 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -88,5 +94,5 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	atomic_dec(val);
Index: uspace/lib/libc/arch/ppc32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/ppc32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcppc32	
+/** @addtogroup libcppc32
  * @{
  */
@@ -54,4 +54,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/sparc64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/atomic.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/sparc64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -46,39 +46,47 @@
  *
  * @param val Atomic variable.
- * @param i Signed value to be added.
+ * @param i   Signed value to be added.
  *
  * @return Value of the atomic variable as it existed before addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	uint64_t a, b;
-
+	atomic_count_t a;
+	atomic_count_t b;
+	
 	do {
-		volatile uintptr_t x = (uint64_t) &val->count;
-
-		a = *((uint64_t *) x);
+		volatile uintptr_t ptr = (uintptr_t) &val->count;
+		
+		a = *((atomic_count_t *) ptr);
 		b = a + i;
-		asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a));
+		
+		asm volatile (
+			"casx %0, %2, %1\n"
+			: "+m" (*((atomic_count_t *) ptr)),
+			  "+r" (b)
+			: "r" (a)
+		);
 	} while (a != b);
-
+	
 	return a;
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1) + 1;
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1) - 1;
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1);
Index: uspace/lib/libc/arch/sparc64/include/types.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/types.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/arch/sparc64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/generic/futex.c
===================================================================
--- uspace/lib/libc/generic/futex.c	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/generic/futex.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -68,5 +68,5 @@
 int futex_down(futex_t *futex)
 {
-	if (atomic_predec(futex) < 0)
+	if ((atomic_signed_t) atomic_predec(futex) < 0)
 		return __SYSCALL1(SYS_FUTEX_SLEEP, (sysarg_t) &futex->count);
 
@@ -82,5 +82,5 @@
 int futex_up(futex_t *futex)
 {
-	if (atomic_postinc(futex) < 0)
+	if ((atomic_signed_t) atomic_postinc(futex) < 0)
 		return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) &futex->count);
 		
Index: uspace/lib/libc/include/atomicdflt.h
===================================================================
--- uspace/lib/libc/include/atomicdflt.h	(revision f74392fe9cc78a9b01eddaa13d2ad744f4907a1e)
+++ uspace/lib/libc/include/atomicdflt.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -37,25 +37,26 @@
 
 #ifndef LIBC_ARCH_ATOMIC_H_
-#error This file cannot be included directly, include atomic.h instead.
+	#error This file cannot be included directly, include atomic.h instead.
 #endif
 
+#include <stdint.h>
 #include <bool.h>
 
 typedef struct atomic {
-	volatile long count;
+	volatile atomic_count_t count;
 } atomic_t;
 
-static inline void atomic_set(atomic_t *val, long i)
+static inline void atomic_set(atomic_t *val, atomic_count_t i)
 {
-        val->count = i;
+	val->count = i;
 }
 
-static inline long atomic_get(atomic_t *val)
+static inline atomic_count_t atomic_get(atomic_t *val)
 {
-        return val->count;
+	return val->count;
 }
 
 #ifndef CAS
-static inline bool cas(atomic_t *val, long ov, long nv)
+static inline bool cas(atomic_t *val, atomic_count_t ov, atomic_count_t nv)
 {
 	return __sync_bool_compare_and_swap(&val->count, ov, nv);
