X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=arch_atomic_x86.h;h=fdd3d6b58ecd28eaf620e10001920eae0193a073;hp=3422cb4734a0a5e2dd57ff2147f86cd783b58c97;hb=87322fe8f9e201f9018dba7dfcf786b932cd899c;hpb=a81b8e5e402188a088c28e27c5e718b691109cf2 diff --git a/arch_atomic_x86.h b/arch_atomic_x86.h index 3422cb4..fdd3d6b 100644 --- a/arch_atomic_x86.h +++ b/arch_atomic_x86.h @@ -167,7 +167,8 @@ void _atomic_add(volatile void *addr, unsigned long val, int len) __asm__ __volatile__( "lock; addb %1, %0" : "=m"(*__hp(addr)) - : "q" ((unsigned char)val)); + : "iq" ((unsigned char)val) + : "memory"); return; } case 2: @@ -175,7 +176,8 @@ void _atomic_add(volatile void *addr, unsigned long val, int len) __asm__ __volatile__( "lock; addw %1, %0" : "=m"(*__hp(addr)) - : "r" ((unsigned short)val)); + : "ir" ((unsigned short)val) + : "memory"); return; } case 4: @@ -183,7 +185,8 @@ void _atomic_add(volatile void *addr, unsigned long val, int len) __asm__ __volatile__( "lock; addl %1, %0" : "=m"(*__hp(addr)) - : "r" ((unsigned int)val)); + : "ir" ((unsigned int)val) + : "memory"); return; } #if (BITS_PER_LONG == 64) @@ -192,7 +195,8 @@ void _atomic_add(volatile void *addr, unsigned long val, int len) __asm__ __volatile__( "lock; addq %1, %0" : "=m"(*__hp(addr)) - : "r" ((unsigned long)val)); + : "er" ((unsigned long)val) + : "memory"); return; } #endif