From fbda68ea7b3c71195823c85ca41c8afadb00a725 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 17 Aug 2017 21:32:00 -0400 Subject: [PATCH] SDL_endian.h: add SDL_Swap16 and SDL_Swap32 for Watcom/x86 as inline asm Partially fixes Bugzilla #3758. --- include/SDL_endian.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/SDL_endian.h b/include/SDL_endian.h index 2b06e8c475f03..3eda7f2871144 100644 --- a/include/SDL_endian.h +++ b/include/SDL_endian.h @@ -96,6 +96,12 @@ SDL_Swap16(Uint16 x) __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; #else SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) @@ -136,6 +142,21 @@ SDL_Swap32(Uint32 x) __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint32 SDL_Swap32(Uint32); +#ifndef __SW_3 /* 486+ */ +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else /* 386-only */ +#pragma aux SDL_Swap32 = \ + "xchg al, ah" \ + "ror eax, 16" \ + "xchg al, ah" \ + parm [eax] \ + modify [eax]; +#endif #else SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x)