Skip to content
Permalink
Browse files

SDL_bits.h: add __builtin_clz equivalent for Watcom/x86 as inline asm

Partially fixes Bugzilla #3758.
  • Loading branch information
sezero committed Aug 18, 2017
1 parent 7a9b9e0 commit eccbe366bcf45a6c8d377408275da0e2adef27e2
Showing with 15 additions and 0 deletions.
  1. +15 −0 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.

0 comments on commit eccbe36

Please sign in to comment.