Blob Blame History Raw
diff -up devil-1.7.8/src-IL/include/il_endian.h~ devil-1.7.8/src-IL/include/il_endian.h
--- devil-1.7.8/src-IL/include/il_endian.h~	2009-03-08 08:10:08.000000000 +0100
+++ devil-1.7.8/src-IL/include/il_endian.h	2009-03-09 10:11:33.000000000 +0100
@@ -15,6 +15,10 @@
 
 #include "il_internal.h"
 
+#ifdef GCC_X86_ASM
+#include <byteswap.h>
+#endif
+
 #ifdef WORDS_BIGENDIAN  // This is defined by ./configure.
 	#ifndef __BIG_ENDIAN__
 	#define __BIG_ENDIAN__ 1
@@ -104,9 +108,7 @@ INLINE void iSwapUShort(ILushort *s)  {
 		}
 	#else
 	#ifdef GCC_X86_ASM
-		asm("ror $8,%0"
-			: "=r" (*s)
-			: "0" (*s));
+		*s = __bswap_16(*s);
 	#else
 		*s = ((*s)>>8) | ((*s)<<8);
 	#endif //GCC_X86_ASM
@@ -127,8 +129,7 @@ INLINE void iSwapUInt(ILuint *i) {
 		}
 	#else
 	#ifdef GCC_X86_ASM
-			asm("bswap %0;"
-				: "+r" (*i));
+		*i = __bswap_32(*i);
 	#else
 		*i = ((*i)>>24) | (((*i)>>8) & 0xff00) | (((*i)<<8) & 0xff0000) | ((*i)<<24);
 	#endif //GCC_X86_ASM