chiark / gitweb /
eglibc (2.11.3-4+deb6u3) squeeze-lts; urgency=medium
[eglibc.git] / debian / patches / mips / cvs-mips-atomic_h.diff
1 2010-03-23  Mischa Jonker  <mischa.jonker@viragelogic.com>
2
3         [BZ #11291]
4         * sysdeps/mips/bits/atomic.h
5         (__arch_compare_and_exchange_xxx_32_int,
6         __arch_compare_and_exchange_xxx_64_int,
7         __arch_exchange_xxx_32_int, __arch_exchange_xxx_64_int,
8         __arch_exchange_and_add_32_int, __arch_exchange_and_add_64_int):
9         Specify *mem as asm output as well as input.
10
11 diff --git a/sysdeps/mips/bits/atomic.h b/sysdeps/mips/bits/atomic.h
12 index 167d9a5..11b3467 100644
13 --- a/ports/sysdeps/mips/bits/atomic.h
14 +++ b/ports/sysdeps/mips/bits/atomic.h
15 @@ -69,16 +69,16 @@ typedef uintmax_t uatomic_max_t;
16       MIPS_PUSH_MIPS2                                                         \
17       rel       "\n"                                                          \
18       "1:\t"                                                                  \
19 -     "ll       %0,%4\n\t"                                                    \
20 +     "ll       %0,%5\n\t"                                                    \
21       "move     %1,$0\n\t"                                                    \
22 -     "bne      %0,%2,2f\n\t"                                                 \
23 -     "move     %1,%3\n\t"                                                    \
24 -     "sc       %1,%4\n\t"                                                    \
25 +     "bne      %0,%3,2f\n\t"                                                 \
26 +     "move     %1,%4\n\t"                                                    \
27 +     "sc       %1,%2\n\t"                                                    \
28       "beqz     %1,1b\n"                                                      \
29       acq       "\n\t"                                                        \
30       ".set     pop\n"                                                        \
31       "2:\n\t"                                                                \
32 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
33 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
34               : "r" (oldval), "r" (newval), "m" (*mem)                        \
35               : "memory")
36  
37 @@ -93,16 +93,16 @@ typedef uintmax_t uatomic_max_t;
38       MIPS_PUSH_MIPS2                                                         \
39       rel       "\n"                                                          \
40       "1:\t"                                                                  \
41 -     "lld      %0,%4\n\t"                                                    \
42 +     "lld      %0,%5\n\t"                                                    \
43       "move     %1,$0\n\t"                                                    \
44 -     "bne      %0,%2,2f\n\t"                                                 \
45 -     "move     %1,%3\n\t"                                                    \
46 -     "scd      %1,%4\n\t"                                                    \
47 +     "bne      %0,%3,2f\n\t"                                                 \
48 +     "move     %1,%4\n\t"                                                    \
49 +     "scd      %1,%2\n\t"                                                    \
50       "beqz     %1,1b\n"                                                      \
51       acq       "\n\t"                                                        \
52       ".set     pop\n"                                                        \
53       "2:\n\t"                                                                \
54 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
55 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
56               : "r" (oldval), "r" (newval), "m" (*mem)                        \
57               : "memory")
58  #endif
59 @@ -189,14 +189,14 @@ typedef uintmax_t uatomic_max_t;
60       MIPS_PUSH_MIPS2                                                         \
61       rel       "\n"                                                          \
62       "1:\t"                                                                  \
63 -     "ll       %0,%3\n\t"                                                    \
64 -     "move     %1,%2\n\t"                                                    \
65 -     "sc       %1,%3\n\t"                                                    \
66 +     "ll       %0,%4\n\t"                                                    \
67 +     "move     %1,%3\n\t"                                                    \
68 +     "sc       %1,%2\n\t"                                                    \
69       "beqz     %1,1b\n"                                                      \
70       acq       "\n\t"                                                        \
71       ".set     pop\n"                                                        \
72       "2:\n\t"                                                                \
73 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
74 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
75               : "r" (newval), "m" (*mem)                                      \
76               : "memory");                                                    \
77    __prev; })
78 @@ -213,14 +213,14 @@ typedef uintmax_t uatomic_max_t;
79       MIPS_PUSH_MIPS2                                                         \
80       rel       "\n"                                                          \
81       "1:\n"                                                                  \
82 -     "lld      %0,%3\n\t"                                                    \
83 -     "move     %1,%2\n\t"                                                    \
84 -     "scd      %1,%3\n\t"                                                    \
85 +     "lld      %0,%4\n\t"                                                    \
86 +     "move     %1,%3\n\t"                                                    \
87 +     "scd      %1,%2\n\t"                                                    \
88       "beqz     %1,1b\n"                                                      \
89       acq       "\n\t"                                                        \
90       ".set     pop\n"                                                        \
91       "2:\n\t"                                                                \
92 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
93 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
94               : "r" (newval), "m" (*mem)                                      \
95               : "memory");                                                    \
96    __prev; })
97 @@ -248,14 +248,14 @@ typedef uintmax_t uatomic_max_t;
98       MIPS_PUSH_MIPS2                                                         \
99       rel       "\n"                                                          \
100       "1:\t"                                                                  \
101 -     "ll       %0,%3\n\t"                                                    \
102 -     "addu     %1,%0,%2\n\t"                                                 \
103 -     "sc       %1,%3\n\t"                                                    \
104 +     "ll       %0,%4\n\t"                                                    \
105 +     "addu     %1,%0,%3\n\t"                                                 \
106 +     "sc       %1,%2\n\t"                                                    \
107       "beqz     %1,1b\n"                                                      \
108       acq       "\n\t"                                                        \
109       ".set     pop\n"                                                        \
110       "2:\n\t"                                                                \
111 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
112 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
113               : "r" (value), "m" (*mem)                                       \
114               : "memory");                                                    \
115    __prev; })
116 @@ -272,14 +272,14 @@ typedef uintmax_t uatomic_max_t;
117       MIPS_PUSH_MIPS2                                                         \
118       rel       "\n"                                                          \
119       "1:\t"                                                                  \
120 -     "lld      %0,%3\n\t"                                                    \
121 -     "daddu    %1,%0,%2\n\t"                                                 \
122 -     "scd      %1,%3\n\t"                                                    \
123 +     "lld      %0,%4\n\t"                                                    \
124 +     "daddu    %1,%0,%3\n\t"                                                 \
125 +     "scd      %1,%2\n\t"                                                    \
126       "beqz     %1,1b\n"                                                      \
127       acq       "\n\t"                                                        \
128       ".set     pop\n"                                                        \
129       "2:\n\t"                                                                \
130 -             : "=&r" (__prev), "=&r" (__cmp)                                 \
131 +             : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem)                    \
132               : "r" (value), "m" (*mem)                                       \
133               : "memory");                                                    \
134    __prev; })