Commit 4955a2cd1600344081e0b618d96c3b29942f76ef
1 parent
a8d3431a
test and set fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1269 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
13 additions
and
15 deletions
exec-all.h
| ... | ... | @@ -392,28 +392,26 @@ static inline int testandset (int *p) |
| 392 | 392 | #ifdef __i386__ |
| 393 | 393 | static inline int testandset (int *p) |
| 394 | 394 | { |
| 395 | - char ret; | |
| 396 | - long int readval; | |
| 395 | + long int readval = 0; | |
| 397 | 396 | |
| 398 | - __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0" | |
| 399 | - : "=q" (ret), "=m" (*p), "=a" (readval) | |
| 400 | - : "r" (1), "m" (*p), "a" (0) | |
| 401 | - : "memory"); | |
| 402 | - return ret; | |
| 397 | + __asm__ __volatile__ ("lock; cmpxchgl %2, %0" | |
| 398 | + : "+m" (*p), "+a" (readval) | |
| 399 | + : "r" (1) | |
| 400 | + : "cc"); | |
| 401 | + return readval; | |
| 403 | 402 | } |
| 404 | 403 | #endif |
| 405 | 404 | |
| 406 | 405 | #ifdef __x86_64__ |
| 407 | 406 | static inline int testandset (int *p) |
| 408 | 407 | { |
| 409 | - char ret; | |
| 410 | - int readval; | |
| 408 | + long int readval = 0; | |
| 411 | 409 | |
| 412 | - __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0" | |
| 413 | - : "=q" (ret), "=m" (*p), "=a" (readval) | |
| 414 | - : "r" (1), "m" (*p), "a" (0) | |
| 415 | - : "memory"); | |
| 416 | - return ret; | |
| 410 | + __asm__ __volatile__ ("lock; cmpxchgl %2, %0" | |
| 411 | + : "+m" (*p), "+a" (readval) | |
| 412 | + : "r" (1) | |
| 413 | + : "cc"); | |
| 414 | + return readval; | |
| 417 | 415 | } |
| 418 | 416 | #endif |
| 419 | 417 | |
| ... | ... | @@ -484,7 +482,7 @@ static inline int testandset (int *p) |
| 484 | 482 | : "=r" (ret) |
| 485 | 483 | : "m" (p) |
| 486 | 484 | : "cc","memory"); |
| 487 | - return ret == 0; | |
| 485 | + return ret; | |
| 488 | 486 | } |
| 489 | 487 | #endif |
| 490 | 488 | ... | ... |