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 | ... | ... |