Commit eccbe366bcf45a6c8d377408275da0e2adef27e2

Ozkan Sezer 2017-08-17T21:30:29

SDL_bits.h: add __builtin_clz equivalent for Watcom/x86 as inline asm Partially fixes Bugzilla #3758.

diff --git a/include/SDL_bits.h b/include/SDL_bits.h
index f12f2c9..60cedc4 100644
--- a/include/SDL_bits.h
+++ b/include/SDL_bits.h
@@ -47,6 +47,16 @@ extern "C" {
  *
  *  \return Index of the most significant bit, or -1 if the value is 0.
  */
+#if defined(__WATCOMC__) && defined(__386__)
+extern _inline int _SDL_clz_watcom (Uint32);
+#pragma aux _SDL_clz_watcom = \
+    "bsr eax, eax" \
+    "xor eax, 31" \
+    parm [eax] nomemory \
+    value [eax] \
+    modify exact [eax] nomemory;
+#endif
+
 SDL_FORCE_INLINE int
 SDL_MostSignificantBitIndex32(Uint32 x)
 {
@@ -58,6 +68,11 @@ SDL_MostSignificantBitIndex32(Uint32 x)
         return -1;
     }
     return 31 - __builtin_clz(x);
+#elif defined(__WATCOMC__) && defined(__386__)
+    if (x == 0) {
+        return -1;
+    }
+    return 31 - _SDL_clz_watcom(x);
 #else
     /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
      * <seander@cs.stanford.edu>, released in the public domain.