diff -uNr builtin.h.org builtin.h
|
old
|
new
|
|
| 7 | 7 | #define _I386_BUILTIN_H |
| 8 | 8 | |
| 9 | 9 | #include <sys/cdefs.h> |
| 10 | | #include <stdint.h> |
| 11 | 10 | |
| 12 | 11 | __BEGIN_DECLS |
| 13 | 12 | |
| … |
… |
|
| 61 | 60 | * @param pu16 Pointer to the value to update. |
| 62 | 61 | * @param u16 The new value. |
| 63 | 62 | */ |
| 64 | | static inline uint16_t __atomic_xchg_word(volatile uint16_t *pu16, uint16_t u16) |
| | 63 | static inline __uint16_t __atomic_xchg_word(volatile __uint16_t *pu16, __uint16_t u16) |
| 65 | 64 | { |
| 66 | 65 | __asm__ __volatile__ ("xchgw %0, %1" : "=m" (*pu16), "=r" (u16) : "1" (u16)); |
| 67 | 66 | return u16; |
| … |
… |
|
| 165 | 164 | * @returns The new value. |
| 166 | 165 | * @param pu32 Pointer to the value to increment. |
| 167 | 166 | */ |
| 168 | | static __inline__ uint32_t __atomic_increment_u32(uint32_t __volatile__ *pu32) |
| | 167 | static __inline__ __uint32_t __atomic_increment_u32(__uint32_t __volatile__ *pu32) |
| 169 | 168 | { |
| 170 | | uint32_t u32; |
| | 169 | __uint32_t u32; |
| 171 | 170 | __asm__ __volatile__("lock; xadd %0, %1\n\t" |
| 172 | 171 | "incl %0\n\t" |
| 173 | 172 | : "=r" (u32), |
| … |
… |
|
| 183 | 182 | * @returns The new value. |
| 184 | 183 | * @param pi32 Pointer to the value to increment. |
| 185 | 184 | */ |
| 186 | | static __inline__ int32_t __atomic_increment_s32(int32_t __volatile__ *pi32) |
| | 185 | static __inline__ __int32_t __atomic_increment_s32(__int32_t __volatile__ *pi32) |
| 187 | 186 | { |
| 188 | | int32_t i32; |
| | 187 | __int32_t i32; |
| 189 | 188 | __asm__ __volatile__("lock; xadd %0, %1\n\t" |
| 190 | 189 | "incl %0\n\t" |
| 191 | 190 | : "=r" (i32), |
| … |
… |
|
| 200 | 199 | * |
| 201 | 200 | * @param pu16 Pointer to the value to increment. |
| 202 | 201 | */ |
| 203 | | static __inline__ void __atomic_increment_u16(uint16_t __volatile__ *pu16) |
| | 202 | static __inline__ void __atomic_increment_u16(__uint16_t __volatile__ *pu16) |
| 204 | 203 | { |
| 205 | 204 | __asm__ __volatile__("lock; incw %0" |
| 206 | 205 | : "=m" (*pu16) |
| … |
… |
|
| 225 | 224 | * @returns The new value. |
| 226 | 225 | * @param pu32 Pointer to the value to decrement. |
| 227 | 226 | */ |
| 228 | | static __inline__ uint32_t __atomic_decrement_u32(__volatile__ uint32_t *pu32) |
| | 227 | static __inline__ __uint32_t __atomic_decrement_u32(__volatile__ __uint32_t *pu32) |
| 229 | 228 | { |
| 230 | | uint32_t u32; |
| | 229 | __uint32_t u32; |
| 231 | 230 | __asm__ __volatile__("lock; xadd %0, %1\n\t" |
| 232 | 231 | "decl %0\n\t" |
| 233 | 232 | : "=r" (u32), |
| … |
… |
|
| 243 | 242 | * @returns The new value. |
| 244 | 243 | * @param pi32 Pointer to the value to decrement. |
| 245 | 244 | */ |
| 246 | | static __inline__ int32_t __atomic_decrement_s32(__volatile__ int32_t *pi32) |
| | 245 | static __inline__ __int32_t __atomic_decrement_s32(__volatile__ __int32_t *pi32) |
| 247 | 246 | { |
| 248 | | int32_t i32; |
| | 247 | __int32_t i32; |
| 249 | 248 | __asm__ __volatile__("lock; xadd %0, %1\n\t" |
| 250 | 249 | "decl %0\n\t" |
| 251 | 250 | : "=r" (i32), |
| … |
… |
|
| 261 | 260 | * @returns The new value. |
| 262 | 261 | * @param pu16 Pointer to the value to decrement. |
| 263 | 262 | */ |
| 264 | | static __inline__ void __atomic_decrement_u16(uint16_t __volatile__ *pu16) |
| | 263 | static __inline__ void __atomic_decrement_u16(__uint16_t __volatile__ *pu16) |
| 265 | 264 | { |
| 266 | 265 | __asm__ __volatile__("lock; decw %0" |
| 267 | 266 | : "=m" (*pu16) |
| … |
… |
|
| 311 | 310 | * @param pu16 Pointer to the value to increment. |
| 312 | 311 | * @param u16Max *pu16 must not be above this value after the incrementation. |
| 313 | 312 | */ |
| 314 | | static inline unsigned __atomic_increment_word_max(volatile uint16_t *pu16, const uint16_t u16Max) |
| | 313 | static inline unsigned __atomic_increment_word_max(volatile __uint16_t *pu16, const __uint16_t u16Max) |
| 315 | 314 | { |
| 316 | 315 | unsigned rc = 0; |
| 317 | 316 | __asm__ __volatile__("movw %2, %%ax\n\t" |
| … |
… |
|
| 380 | 379 | * @param pu16 Pointer to the value to decrement. |
| 381 | 380 | * @param u16Min *pu16 must not be below this value after the decrementation. |
| 382 | 381 | */ |
| 383 | | static inline unsigned __atomic_decrement_word_min(volatile uint16_t *pu16, const uint16_t u16Min) |
| | 382 | static inline unsigned __atomic_decrement_word_min(volatile __uint16_t *pu16, const __uint16_t u16Min) |
| 384 | 383 | { |
| 385 | 384 | unsigned rc = 0; |
| 386 | 385 | __asm__ __volatile__("movw %2, %%ax\n\t" |
| … |
… |
|
| 414 | 413 | * @param u32New The new value. |
| 415 | 414 | * @param u32Cur The current value. Only update if *pu32 equals this one. |
| 416 | 415 | */ |
| 417 | | static inline unsigned __atomic_cmpxchg32(volatile uint32_t *pu32, uint32_t u32New, uint32_t u32Old) |
| | 416 | static inline unsigned __atomic_cmpxchg32(volatile __uint32_t *pu32, __uint32_t u32New, __uint32_t u32Old) |
| 418 | 417 | { |
| 419 | 418 | __asm__ __volatile__("lock; cmpxchgl %2, %1\n\t" |
| 420 | 419 | "setz %%al\n\t" |