diff options
-rw-r--r-- | src/radeon_exa.c | 9 | ||||
-rw-r--r-- | src/radeon_render.c | 9 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/radeon_exa.c b/src/radeon_exa.c index 4da4841a..a6ededa2 100644 --- a/src/radeon_exa.c +++ b/src/radeon_exa.c @@ -99,10 +99,17 @@ static __inline__ int RADEONLog2(int val) { int bits; - +#if (defined __i386__ || defined __x86_64__) && (defined __GNUC__) + __asm volatile("bsrl %1, %0" + : "=r" (bits) + : "c" (val) + ); + return bits; +#else for (bits = 0; val != 0; val >>= 1, ++bits) ; return bits - 1; +#endif } static __inline__ CARD32 F_TO_DW(float val) diff --git a/src/radeon_render.c b/src/radeon_render.c index a80d1360..950753ca 100644 --- a/src/radeon_render.c +++ b/src/radeon_render.c @@ -250,10 +250,17 @@ static __inline__ int ATILog2(int val) { int bits; - +#if (defined __i386__ || defined __x86_64__) && (defined __GNUC__) + __asm volatile("bsrl %1, %0" + : "=r" (bits) + : "c" (val) + ); + return bits; +#else for (bits = 0; val != 0; val >>= 1, ++bits) ; return bits - 1; +#endif } static void |