Commit 4955a2cd1600344081e0b618d96c3b29942f76ef

Authored by bellard
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  
... ...