From c2209405ecb88db972b91bef4630184c310e31b6 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sat, 24 Mar 2018 22:27:31 +0300 Subject: [PATCH] SDL_endian.h: add Watcom inline asm for SDL_Swap16 and SDL_Swap32 --- include/SDL_endian.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/SDL_endian.h b/include/SDL_endian.h index 068da918f..cf2b4422c 100644 --- a/include/SDL_endian.h +++ b/include/SDL_endian.h @@ -97,6 +97,12 @@ static __inline__ Uint16 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 static __inline__ Uint16 SDL_Swap16(Uint16 x) { return SDL_static_cast(Uint16, ((x<<8)|(x>>8))); @@ -132,6 +138,21 @@ static __inline__ Uint32 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 static __inline__ Uint32 SDL_Swap32(Uint32 x) { return SDL_static_cast(Uint32, ((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24)));