Index: uspace/libc/arch/sparc64/include/atomic.h
===================================================================
--- uspace/libc/arch/sparc64/include/atomic.h	(revision d681c173694bd83b842b2932968cec935ec1f26f)
+++ uspace/libc/arch/sparc64/include/atomic.h	(revision 06e1e95342d7b9a9c85c7492529a309d51a3fb6c)
@@ -50,17 +50,12 @@
 {
 	uint64_t a, b;
-	volatile uint64_t x = (uint64_t) &val->count;
 
-	__asm__ volatile (
-		"0:\n"
-		"ldx %0, %1\n"
-		"add %1, %3, %2\n"
-		"casx %0, %1, %2\n"
-		"cmp %1, %2\n"
-		"bne 0b\n"		/* The operation failed and must be attempted again if a != b. */
-		"nop\n"
-		: "=m" (*((uint64_t *)x)), "=r" (a), "=r" (b)
-		: "r" (i)
-	);
+	do {
+		volatile uintptr_t x = (uint64_t) &val->count;
+
+		a = *((uint64_t *) x);
+		b = a + i;
+		__asm__ volatile ("casx %0, %1, %2\n": "+m" (*((uint64_t *)x)), "+r" (a), "+r" (b));
+	} while (a != b);
 
 	return a;
