From eccbe366bcf45a6c8d377408275da0e2adef27e2 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 17 Aug 2017 21:30:29 -0400 Subject: [PATCH] SDL_bits.h: add __builtin_clz equivalent for Watcom/x86 as inline asm Partially fixes Bugzilla #3758. --- include/SDL_bits.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/SDL_bits.h b/include/SDL_bits.h index f12f2c9a1..60cedc414 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 * , released in the public domain.