--- xf86drm.h | 24 23 + 1 - 0 ! 1 file changed, 23 insertions(+), 1 deletion(-) Index: libdrm-2.4.9/xf86drm.h =================================================================== --- libdrm-2.4.9.orig/xf86drm.h 2009-06-02 08:03:08.000000000 -0400 +++ libdrm-2.4.9/xf86drm.h 2009-06-02 08:10:38.000000000 -0400 @@ -422,6 +422,28 @@ do { register unsigned int __old __asm(" : "cr0", "memory"); \ } 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"); \ + } while(0) + #endif /* architecture */ #endif /* __GNUC__ >= 2 */ @@ -431,7 +453,7 @@ do { register unsigned int __old __asm(" #if defined(__alpha__) #define DRM_CAS_RESULT(_result) long _result -#elif defined(__powerpc__) +#elif defined(__powerpc__) || defined(__mips__) #define DRM_CAS_RESULT(_result) int _result #else #define DRM_CAS_RESULT(_result) char _result