diff --git a/libdrm/xf86drm.h b/libdrm/xf86drm.h index f9dd1bf..6226be1 100644 --- a/libdrm/xf86drm.h +++ b/libdrm/xf86drm.h @@ -325,29 +325,26 @@ typedef struct _drmSetVersion { #elif defined(__alpha__) -#define DRM_CAS(lock, old, new, ret) \ - do { \ - int old32; \ - int cur32; \ - __asm__ __volatile__( \ - " mb\n" \ - " zap %4, 0xF0, %0\n" \ - " ldl_l %1, %2\n" \ - " zap %1, 0xF0, %1\n" \ - " cmpeq %0, %1, %1\n" \ - " beq %1, 1f\n" \ - " bis %5, %5, %1\n" \ - " stl_c %1, %2\n" \ - "1: xor %1, 1, %1\n" \ - " stl %1, %3" \ - : "=r" (old32), \ - "=&r" (cur32), \ - "=m" (__drm_dummy_lock(lock)),\ - "=m" (ret) \ - : "r" (old), \ - "r" (new)); \ - } while(0) - +#define DRM_CAS(lock, old, new, ret) \ + do { \ + int current; \ + __asm__ __volatile__( \ + "mb\n\t" \ + "mov $31, %0\n\t" \ + "ldl_l %1, %2\n\t" \ + "cmpeq %1, %4, %1\n\t" \ + "beq %1, 1f\n\t" \ + "stl_c %3, %2\n\t" \ + "addq %0, 1, %0\n\t" \ + "1:" \ + : "=&r" (ret), \ + "=&r" (current), \ + "=m" (__drm_dummy_lock(lock)) \ + : "r" (new), \ + "r" (old) \ + ); \ + } while (0) + #elif defined(__sparc__) #define DRM_CAS(lock,old,new,__ret) \