Index: libdrm/libdrm/xf86drm.h =================================================================== --- libdrm.orig/libdrm/xf86drm.h 2006-11-09 05:54.000000000 +0800 +++ libdrm.orig/libdrm/xf86drm.h 2007-09-26 23:31:48.000000000 +0800 @@ -346,6 +346,30 @@ "r" (new)); \ } while(0) +#elif defined(__mips__) + +#define DRM_CAS(lock, old, new, ret) \ + do { \ + __asm__ __volatile__( \ + " .set mips3;.set noreorder;\n" \ + " sync; \n" \ + " ll %1, %0;\n" \ + " bne %1, %2, 1f;\n" \ + " li %1, 1; \n" \ + " move %1, %3; \n" \ + " sc %1, %0;\n" \ + " xori %1, %1, 1\n" \ + "1: \n" \ + " .set mips0; .set reorder;\n" \ + : "=m" (__drm_dummy_lock(lock)),\ + "=&r" (ret) \ + : "r" (old), \ + "r" (new) \ + :"memory","$8" \ + ); \ + } while(0) + + #elif defined(__sparc__) #define DRM_CAS(lock,old,new,__ret) \ @@ -427,7 +451,7 @@ #define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ #endif -#if defined(__alpha__) || defined(__powerpc__) +#if defined(__alpha__) || defined(__powerpc__) || defined(__mips__) #define DRM_CAS_RESULT(_result) int _result #else #define DRM_CAS_RESULT(_result) char _result