Skip to content

Commit

Permalink
SDL_bits.h: add __builtin_clz equivalent for Watcom/x86 as inline asm
Browse files Browse the repository at this point in the history
Partially fixes Bugzilla #3758.
  • Loading branch information
sezero committed Aug 18, 2017
1 parent 7a9b9e0 commit eccbe36
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions include/SDL_bits.h
Expand Up @@ -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)
{
Expand All @@ -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.
Expand Down

0 comments on commit eccbe36

Please sign in to comment.