1 --- amarok/amarok/src/engine/helix/helix-sp/helix-include/common/include/atomicbase.h.orig 2005-11-03 22:22:27.000000000 +0100
2 +++ amarok/amarok/src/engine/helix/helix-sp/helix-include/common/include/atomicbase.h 2005-11-03 23:14:46.000000000 +0100
4 #elif defined (__sparc__) && defined (__GNUC__)
9 HXAtomicIncUINT32(UINT32* pNum)
11 __asm__ __volatile__(\
18 HXAtomicDecUINT32(UINT32* pNum)
24 /* Increment by 1 and return new value */
27 HXAtomicIncRetUINT32(UINT32* pNum)
29 volatile UINT32 ulRet;
33 /* Decrement by 1 and return new value */
36 HXAtomicDecRetUINT32(UINT32* pNum)
37 { volatile UINT32 ulRet;
45 HXAtomicAddUINT32(UINT32* pNum, UINT32 ulNum)
54 HXAtomicSubUINT32(UINT32* pNum, UINT32 ulNum)
60 /* Add n and return new value */
63 HXAtomicAddRetUINT32(UINT32* pNum, UINT32 ulNum)
65 volatile UINT32 ulRet; \
69 /* Subtract n and return new value */
72 HXAtomicSubRetUINT32(UINT32* pNum, UINT32 ulNum)
73 { volatile UINT32 ulRet;
79 -inline void HXAtomicIncINT32(INT32* p) { HXAtomicIncUINT32((UINT32*)p); }
80 -inline void HXAtomicDecINT32(INT32* p) { HXAtomicDecUINT32((UINT32*)p); }
81 -inline void HXAtomicAddINT32(INT32* p, INT32 n) { HXAtomicAddUINT32((UINT32*)p, (UINT32)n); }
82 -inline void HXAtomicSubINT32(INT32* p, INT32 n) { HXAtomicSubUINT32((UINT32*)p, (UINT32)n); }
83 -inline INT32 HXAtomicIncRetINT32(INT32* p) { return HXAtomicIncRetUINT32((UINT32*)p); }
84 -inline INT32 HXAtomicDecRetINT32(INT32* p) { return HXAtomicDecRetUINT32((UINT32*)p); }
85 -inline INT32 HXAtomicAddRetINT32(INT32* p, INT32 n) { return HXAtomicAddRetUINT32((UINT32*)p, (UINT32)n); }
86 -inline INT32 HXAtomicSubRetINT32(INT32* p, INT32 n) { return HXAtomicSubRetUINT32((UINT32*)p, (UINT32)n); }
87 +static inline void HXAtomicIncINT32(INT32* p) { HXAtomicIncUINT32((UINT32*)p); }
88 +static inline void HXAtomicDecINT32(INT32* p) { HXAtomicDecUINT32((UINT32*)p); }
89 +static inline void HXAtomicAddINT32(INT32* p, INT32 n) { HXAtomicAddUINT32((UINT32*)p, (UINT32)n); }
90 +static inline void HXAtomicSubINT32(INT32* p, INT32 n) { HXAtomicSubUINT32((UINT32*)p, (UINT32)n); }
91 +static inline INT32 HXAtomicIncRetINT32(INT32* p) { return HXAtomicIncRetUINT32((UINT32*)p); }
92 +static inline INT32 HXAtomicDecRetINT32(INT32* p) { return HXAtomicDecRetUINT32((UINT32*)p); }
93 +static inline INT32 HXAtomicAddRetINT32(INT32* p, INT32 n) { return HXAtomicAddRetUINT32((UINT32*)p, (UINT32)n); }
94 +static inline INT32 HXAtomicSubRetINT32(INT32* p, INT32 n) { return HXAtomicSubRetUINT32((UINT32*)p, (UINT32)n); }
99 #elif defined(__GNUC__) && !defined(_OPENBSD) && \
100 (__GNUC__>2 || (__GNUC__==2 && __GNUC_MINOR__>=95)) && \
101 ( defined (__i486__) || defined (__i586__) || defined (__i686__) || \
102 - defined (__pentium__) || defined (__pentiumpro__))
103 + defined (__pentium__) || defined (__pentiumpro__) || defined (__pentium4__) || defined (__athlon__))
106 static __inline__ void
107 @@ -855,6 +855,114 @@
109 #elif defined (__alpha)
113 +/* Increment by 1 and return new value */
115 +HXAtomicIncRetINT32(INT32* pNum)
118 + "10: ldl_l $1, %0\n" // Load-lock value into a register
119 + " addl $1, 1, $1\n" // Increment value
120 + " stl_c $1, %0\n" // Save new value into *pNum
121 + " beq $1, 10b\n" // Retry if sequence failed
122 + : "=m" (*pNum) : "m" (*pNum) : "$1");
126 +/* Decrement by 1 and return new value */
128 +HXAtomicDecRetINT32(INT32* pNum)
131 + "10: ldl_l $1, %0\n" // Load-lock value into a register
132 + " subl $1, 1, $1\n" // Decrement value
133 + " stl_c $1, %0\n" // Save new value into *pNum
134 + " beq $1, 10b\n" // Retry if sequence failed
135 + : "=m" (*pNum) : "m" (*pNum) : "$1");
139 +/* Add n and return new value */
141 +HXAtomicAddRetINT32(INT32* pNum, INT32 n)
144 + "10: ldl_l $1, %0\n" // Load-lock value into a register
145 + " addl $1, %1, $1\n" // Add n to value
146 + " stl_c $1, %0\n" // Save new value into *pNum
147 + " beq $1, 10b\n" // Retry if sequence failed
148 + : "=m" (*pNum) : "r" (n), "m" (*pNum) : "$1");
152 +/* Subtract n and return new value */
154 +HXAtomicSubRetINT32(INT32* pNum, INT32 n)
157 + "10: ldl_l $1, %0\n" // Load-lock value into a register
158 + " subl $1, %1, $1\n" // Subtract n from value
159 + " stl_c $1, %0\n" // Save new value into *pNum
160 + " beq $1, 10b\n" // Retry if sequence failed
161 + : "=m" (*pNum) : "r" (n), "m" (*pNum) : "$1");
165 +/* Increment by 1 and return new value */
166 +static inline UINT32
167 +HXAtomicIncRetUINT32(UINT32* pNum)
170 + "10: ldl_l $1, %0\n" // Load-lock value into a register
171 + " addl $1, 1, $1\n" // Increment value
172 + " stl_c $1, %0\n" // Save new value into *pNum
173 + " beq $1, 10b\n" // Retry if sequence failed
174 + : "=m" (*pNum) : "m" (*pNum) : "$1");
178 +/* Decrement by 1 and return new value */
179 +static inline UINT32
180 +HXAtomicDecRetUINT32(UINT32* pNum)
183 + "10: ldl_l $1, %0\n" // Load-lock value into a register
184 + " subl $1, 1, $1\n" // Decrement value
185 + " stl_c $1, %0\n" // Save new value into *pNum
186 + " beq $1, 10b\n" // Retry if sequence failed
187 + : "=m" (*pNum) : "m" (*pNum) : "$1");
191 +/* Add n and return new value */
192 +static inline UINT32
193 +HXAtomicAddRetUINT32(UINT32* pNum, UINT32 n)
196 + "10: ldl_l $1, %0\n" // Load-lock value into a register
197 + " addl $1, %1, $1\n" // Add n to value
198 + " stl_c $1, %0\n" // Save new value into *pNum
199 + " beq $1, 10b\n" // Retry if sequence failed
200 + : "=m" (*pNum) : "r" (n), "m" (*pNum) : "$1");
204 +/* Subtract n and return new value */
205 +static inline UINT32
206 +HXAtomicSubRetUINT32(UINT32* pNum, UINT32 n)
209 + "10: ldl_l $1, %0\n" // Load-lock value into a register
210 + " subl $1, %1, $1\n" // Subtract n from value
211 + " stl_c $1, %0\n" // Save new value into *pNum
212 + " beq $1, 10b\n" // Retry if sequence failed
213 + : "=m" (*pNum) : "r" (n), "m" (*pNum) : "$1");
221 /* Increment by 1 and return new value */
228 #define HXAtomicIncINT32(p) HXAtomicIncRetINT32((p))
229 #define HXAtomicDecINT32(p) HXAtomicDecRetINT32((p))
230 #define HXAtomicAddINT32(p,n) HXAtomicAddRetINT32((p),(n))