File SDL_sdl_endian.patch of Package SDL.23114
--- include/SDL_endian.h.orig
+++ include/SDL_endian.h
@@ -37,12 +37,11 @@
#define SDL_LIL_ENDIAN 1234
#define SDL_BIG_ENDIAN 4321
/*@}*/
+#include <byteswap.h>
+#include <endian.h>
#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */
-#ifdef __linux__
-#include <endian.h>
#define SDL_BYTEORDER __BYTE_ORDER
-#else /* __linux __ */
#if defined(__hppa__) || \
defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
(defined(__MIPS__) && defined(__MISPEB__)) || \
@@ -52,7 +51,6 @@
#else
#define SDL_BYTEORDER SDL_LIL_ENDIAN
#endif
-#endif /* __linux __ */
#endif /* !SDL_BYTEORDER */
@@ -62,6 +60,13 @@
extern "C" {
#endif
+
+static __inline__ Uint16 SDL_Swap16(Uint16 x) { return bswap_16(x); }
+
+static __inline__ Uint32 SDL_Swap32(Uint32 x) { return bswap_32(x); }
+
+static __inline__ Uint64 SDL_Swap64(Uint64 x) { return bswap_64(x); }
+
/**
* @name SDL_Swap Functions
* Use inline functions for compilers that support them, and static
@@ -70,139 +75,18 @@ extern "C" {
* header should only be included in files that actually use them.
*/
/*@{*/
-#if defined(__GNUC__) && defined(__i386__) && \
- !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */)
-static __inline__ Uint16 SDL_Swap16(Uint16 x)
-{
- __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x));
- return x;
-}
-#elif defined(__GNUC__) && defined(__x86_64__)
-static __inline__ Uint16 SDL_Swap16(Uint16 x)
-{
- __asm__("xchgb %b0,%h0" : "=Q" (x) : "0" (x));
- return x;
-}
-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
-static __inline__ Uint16 SDL_Swap16(Uint16 x)
-{
- int result;
-
- __asm__("rlwimi %0,%2,8,16,23" : "=&r" (result) : "0" (x >> 8), "r" (x));
- return (Uint16)result;
-}
-#elif defined(__GNUC__) && (defined(__m68k__) && !defined(__mcoldfire__))
-static __inline__ Uint16 SDL_Swap16(Uint16 x)
-{
- __asm__("rorw #8,%0" : "=d" (x) : "0" (x) : "cc");
- return x;
-}
-#else
-static __inline__ Uint16 SDL_Swap16(Uint16 x) {
- return SDL_static_cast(Uint16, ((x<<8)|(x>>8)));
-}
-#endif
-
-#if defined(__GNUC__) && defined(__i386__) && \
- !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */)
-static __inline__ Uint32 SDL_Swap32(Uint32 x)
-{
- __asm__("bswap %0" : "=r" (x) : "0" (x));
- return x;
-}
-#elif defined(__GNUC__) && defined(__x86_64__)
-static __inline__ Uint32 SDL_Swap32(Uint32 x)
-{
- __asm__("bswapl %0" : "=r" (x) : "0" (x));
- return x;
-}
-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
-static __inline__ Uint32 SDL_Swap32(Uint32 x)
-{
- Uint32 result;
-
- __asm__("rlwimi %0,%2,24,16,23" : "=&r" (result) : "0" (x>>24), "r" (x));
- __asm__("rlwimi %0,%2,8,8,15" : "=&r" (result) : "0" (result), "r" (x));
- __asm__("rlwimi %0,%2,24,0,7" : "=&r" (result) : "0" (result), "r" (x));
- return result;
-}
-#elif defined(__GNUC__) && (defined(__m68k__) && !defined(__mcoldfire__))
-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;
-}
-#else
-static __inline__ Uint32 SDL_Swap32(Uint32 x) {
- return SDL_static_cast(Uint32, ((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24)));
-}
-#endif
-
-#ifdef SDL_HAS_64BIT_TYPE
-#if defined(__GNUC__) && defined(__i386__) && \
- !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */)
-static __inline__ Uint64 SDL_Swap64(Uint64 x)
-{
- union {
- struct { Uint32 a,b; } s;
- Uint64 u;
- } v;
- v.u = x;
- __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
- : "=r" (v.s.a), "=r" (v.s.b)
- : "0" (v.s.a), "1" (v.s.b));
- return v.u;
-}
-#elif defined(__GNUC__) && defined(__x86_64__)
-static __inline__ Uint64 SDL_Swap64(Uint64 x)
-{
- __asm__("bswapq %0" : "=r" (x) : "0" (x));
- return x;
-}
-#else
-static __inline__ Uint64 SDL_Swap64(Uint64 x)
-{
- Uint32 hi, lo;
-
- /* Separate into high and low 32-bit values and swap them */
- lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
- x >>= 32;
- hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
- x = SDL_Swap32(lo);
- x <<= 32;
- x |= SDL_Swap32(hi);
- return (x);
-}
-#endif
-#else
-/* This is mainly to keep compilers from complaining in SDL code.
- * If there is no real 64-bit datatype, then compilers will complain about
- * the fake 64-bit datatype that SDL provides when it compiles user code.
- */
-#define SDL_Swap64(X) (X)
-#endif /* SDL_HAS_64BIT_TYPE */
-/*@}*/
/**
* @name SDL_SwapLE and SDL_SwapBE Functions
* Byteswap item from the specified endianness to the native endianness
*/
/*@{*/
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-#define SDL_SwapLE16(X) (X)
-#define SDL_SwapLE32(X) (X)
-#define SDL_SwapLE64(X) (X)
-#define SDL_SwapBE16(X) SDL_Swap16(X)
-#define SDL_SwapBE32(X) SDL_Swap32(X)
-#define SDL_SwapBE64(X) SDL_Swap64(X)
-#else
-#define SDL_SwapLE16(X) SDL_Swap16(X)
-#define SDL_SwapLE32(X) SDL_Swap32(X)
-#define SDL_SwapLE64(X) SDL_Swap64(X)
-#define SDL_SwapBE16(X) (X)
-#define SDL_SwapBE32(X) (X)
-#define SDL_SwapBE64(X) (X)
-#endif
+#define SDL_SwapLE16(X) htole16(X)
+#define SDL_SwapLE32(X) htole32(X)
+#define SDL_SwapLE64(X) htole64(X)
+#define SDL_SwapBE16(X) htobe16(X)
+#define SDL_SwapBE32(X) htobe32(X)
+#define SDL_SwapBE64(X) htobe64(X)
/*@}*/
/* Ends C function definitions when using C++ */