diff options
Diffstat (limited to 'meta/recipes-multimedia/pulseaudio/libatomics-ops/libatomics-ops_fix_for_x32.patch')
-rw-r--r-- | meta/recipes-multimedia/pulseaudio/libatomics-ops/libatomics-ops_fix_for_x32.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/pulseaudio/libatomics-ops/libatomics-ops_fix_for_x32.patch b/meta/recipes-multimedia/pulseaudio/libatomics-ops/libatomics-ops_fix_for_x32.patch new file mode 100644 index 0000000000..17686063de --- /dev/null +++ b/meta/recipes-multimedia/pulseaudio/libatomics-ops/libatomics-ops_fix_for_x32.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | Upstream-Status: Pending | ||
2 | |||
3 | Remove the `q' suffix on x86-64 atomic instructions. | ||
4 | |||
5 | We don't need the `q' suffix on x86_64 atomic instructions for AO_t, | ||
6 | which is defined as "unsigned long". "unsigned long" is 32bit for x32 | ||
7 | and 64bit for x86-64. The register operand in x86-64 atomic instructions | ||
8 | is sufficient to properly determine the register size. | ||
9 | |||
10 | Received this patch from H.J. Lu <hjl.tools@gmail.com> | ||
11 | Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com> 2011/12/02 | ||
12 | |||
13 | --- libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h.x32 2005-09-28 17:16:38.000000000 -0700 | ||
14 | +++ libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h 2011-12-02 09:29:54.265251875 -0800 | ||
15 | @@ -60,7 +60,7 @@ AO_fetch_and_add_full (volatile AO_t *p, | ||
16 | { | ||
17 | AO_t result; | ||
18 | |||
19 | - __asm__ __volatile__ ("lock; xaddq %0, %1" : | ||
20 | + __asm__ __volatile__ ("lock; xadd %0, %1" : | ||
21 | "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) | ||
22 | : "memory"); | ||
23 | return result; | ||
24 | @@ -111,7 +111,7 @@ AO_int_fetch_and_add_full (volatile unsi | ||
25 | AO_INLINE void | ||
26 | AO_or_full (volatile AO_t *p, AO_t incr) | ||
27 | { | ||
28 | - __asm__ __volatile__ ("lock; orq %1, %0" : | ||
29 | + __asm__ __volatile__ ("lock; or %1, %0" : | ||
30 | "=m" (*p) : "r" (incr), "m" (*p) : "memory"); | ||
31 | } | ||
32 | |||
33 | @@ -136,7 +136,7 @@ AO_compare_and_swap_full(volatile AO_t * | ||
34 | AO_t old, AO_t new_val) | ||
35 | { | ||
36 | char result; | ||
37 | - __asm__ __volatile__("lock; cmpxchgq %3, %0; setz %1" | ||
38 | + __asm__ __volatile__("lock; cmpxchg %3, %0; setz %1" | ||
39 | : "=m"(*addr), "=q"(result) | ||
40 | : "m"(*addr), "r" (new_val), "a"(old) : "memory"); | ||
41 | return (int) result; | ||