From: Alex Hornung Date: Wed, 18 Nov 2009 19:54:13 +0000 (+0000) Subject: atomic - fix inline assembly X-Git-Tag: v2.7.1~373^2~5 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/caae4d604234d17dff3080f60624a583965c2cf4?hp=8a1bf2ada1b31653599a6ce9a52bb4f40cc8307a atomic - fix inline assembly * Mark eax as early clobber in atomic_intr_cond_try. This solves a longstanding and previously conditionalized issue with clang. Marking it as early clobber avoids it being used as a register elsewhere, apart from explicit uses. GCC behaviour is not affected. Suggested-by: Dale Johannesen --- diff --git a/sys/cpu/i386/include/atomic.h b/sys/cpu/i386/include/atomic.h index 34fd431549..0960c75371 100644 --- a/sys/cpu/i386/include/atomic.h +++ b/sys/cpu/i386/include/atomic.h @@ -309,12 +309,8 @@ atomic_intr_cond_try(__atomic_intr_t *p) MPLOCKED "decl %0; " \ "movl $1,%%eax;" \ "2: ;" - : "+m" (*p), "=a"(ret) -#ifdef __clang__ - : : "ax", "cx", "dx"); -#else + : "+m" (*p), "=&a"(ret) : : "cx", "dx"); -#endif return (ret); } diff --git a/sys/cpu/x86_64/include/atomic.h b/sys/cpu/x86_64/include/atomic.h index cc543d3408..b6d0b66e8f 100644 --- a/sys/cpu/x86_64/include/atomic.h +++ b/sys/cpu/x86_64/include/atomic.h @@ -331,12 +331,8 @@ atomic_intr_cond_try(__atomic_intr_t *p) MPLOCKED "decl %0; " \ "movl $1,%%eax;" \ "2: ;" - : "+m" (*p), "=a"(ret) -#ifdef __clang__ - : : "ax", "cx", "dx"); -#else + : "+m" (*p), "=&a"(ret) : : "cx", "dx"); -#endif return (ret); }