diff options
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r-- | sysdeps/x86_64/bits/atomic.h | 30 | ||||
-rw-r--r-- | sysdeps/x86_64/bits/byteswap.h | 3 |
2 files changed, 17 insertions, 16 deletions
diff --git a/sysdeps/x86_64/bits/atomic.h b/sysdeps/x86_64/bits/atomic.h index 80e8a0bccb..39c6ecba83 100644 --- a/sysdeps/x86_64/bits/atomic.h +++ b/sysdeps/x86_64/bits/atomic.h @@ -144,7 +144,7 @@ typedef uintmax_t uatomic_max_t; ({ __typeof (*mem) result; \ if (sizeof (*mem) == 1) \ __asm __volatile ("xchgb %b0, %1" \ - : "=r" (result), "=m" (*mem) \ + : "=q" (result), "=m" (*mem) \ : "0" (newvalue), "m" (*mem)); \ else if (sizeof (*mem) == 2) \ __asm __volatile ("xchgw %w0, %1" \ @@ -165,7 +165,7 @@ typedef uintmax_t uatomic_max_t; ({ __typeof (*mem) result; \ if (sizeof (*mem) == 1) \ __asm __volatile (lock "xaddb %b0, %1" \ - : "=r" (result), "=m" (*mem) \ + : "=q" (result), "=m" (*mem) \ : "0" (value), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ else if (sizeof (*mem) == 2) \ @@ -209,7 +209,7 @@ typedef uintmax_t uatomic_max_t; else if (sizeof (*mem) == 1) \ __asm __volatile (lock "addb %b1, %0" \ : "=m" (*mem) \ - : "ir" (value), "m" (*mem), \ + : "iq" (value), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ else if (sizeof (*mem) == 2) \ __asm __volatile (lock "addw %w1, %0" \ @@ -243,7 +243,7 @@ typedef uintmax_t uatomic_max_t; if (sizeof (*mem) == 1) \ __asm __volatile (LOCK_PREFIX "addb %b2, %0; sets %1" \ : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ + : "iq" (value), "m" (*mem)); \ else if (sizeof (*mem) == 2) \ __asm __volatile (LOCK_PREFIX "addw %w2, %0; sets %1" \ : "=m" (*mem), "=qm" (__result) \ @@ -264,7 +264,7 @@ typedef uintmax_t uatomic_max_t; if (sizeof (*mem) == 1) \ __asm __volatile (LOCK_PREFIX "addb %b2, %0; setz %1" \ : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ + : "iq" (value), "m" (*mem)); \ else if (sizeof (*mem) == 2) \ __asm __volatile (LOCK_PREFIX "addw %w2, %0; setz %1" \ : "=m" (*mem), "=qm" (__result) \ @@ -393,7 +393,7 @@ typedef uintmax_t uatomic_max_t; if (sizeof (*mem) == 1) \ __asm __volatile (LOCK_PREFIX "orb %b2, %0" \ : "=m" (*mem) \ - : "m" (*mem), "ir" (1L << (bit))); \ + : "m" (*mem), "iq" (1L << (bit))); \ else if (sizeof (*mem) == 2) \ __asm __volatile (LOCK_PREFIX "orw %w2, %0" \ : "=m" (*mem) \ @@ -418,7 +418,7 @@ typedef uintmax_t uatomic_max_t; if (sizeof (*mem) == 1) \ __asm __volatile (LOCK_PREFIX "btsb %3, %1; setc %0" \ : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ + : "m" (*mem), "iq" (bit)); \ else if (sizeof (*mem) == 2) \ __asm __volatile (LOCK_PREFIX "btsw %3, %1; setc %0" \ : "=q" (__result), "=m" (*mem) \ @@ -440,11 +440,11 @@ typedef uintmax_t uatomic_max_t; #define atomic_and(mem, mask) \ do { \ if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "andb %1, %b0" \ + __asm __volatile (LOCK_PREFIX "andb %b1, %0" \ : "=m" (*mem) \ - : "ir" (mask), "m" (*mem)); \ + : "iq" (mask), "m" (*mem)); \ else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "andw %1, %w0" \ + __asm __volatile (LOCK_PREFIX "andw %w1, %0" \ : "=m" (*mem) \ : "ir" (mask), "m" (*mem)); \ else if (sizeof (*mem) == 4) \ @@ -452,7 +452,7 @@ typedef uintmax_t uatomic_max_t; : "=m" (*mem) \ : "ir" (mask), "m" (*mem)); \ else \ - __asm __volatile (LOCK_PREFIX "andq %1, %q0" \ + __asm __volatile (LOCK_PREFIX "andq %q1, %0" \ : "=m" (*mem) \ : "ir" (mask), "m" (*mem)); \ } while (0) @@ -461,12 +461,12 @@ typedef uintmax_t uatomic_max_t; #define __arch_or_body(lock, mem, mask) \ do { \ if (sizeof (*mem) == 1) \ - __asm __volatile (lock "orb %1, %b0" \ + __asm __volatile (lock "orb %b1, %0" \ : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ + : "iq" (mask), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "orw %1, %w0" \ + __asm __volatile (lock "orw %w1, %0" \ : "=m" (*mem) \ : "ir" (mask), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ @@ -476,7 +476,7 @@ typedef uintmax_t uatomic_max_t; : "ir" (mask), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ else \ - __asm __volatile (lock "orq %1, %q0" \ + __asm __volatile (lock "orq %q1, %0" \ : "=m" (*mem) \ : "ir" (mask), "m" (*mem), \ "i" (offsetof (tcbhead_t, multiple_threads))); \ diff --git a/sysdeps/x86_64/bits/byteswap.h b/sysdeps/x86_64/bits/byteswap.h index 7514a9f4db..ec2b17889d 100644 --- a/sysdeps/x86_64/bits/byteswap.h +++ b/sysdeps/x86_64/bits/byteswap.h @@ -61,7 +61,8 @@ || defined __pentiumpro__ || defined __pentium4__ \ || defined __k8__ || defined __athlon__ \ || defined __k6__ || defined __nocona__ \ - || defined __core2__ || defined __geode__) + || defined __core2__ || defined __geode__ \ + || defined __amdfam10__) /* To swap the bytes in a word the i486 processors and up provide the `bswap' opcode. On i386 we have to use three instructions. */ # define __bswap_32(x) \ |