From 72825d3b39fae10cc83ae6f1fa8be0dd303b7d177a33ca1cda1219091771ecca Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 15 May 2018 00:04:42 +0000 Subject: [PATCH] Accepting request 606425 from home:elvigia:branches:games - SDL2-endian.patch: bring up patch from SDL1, use optimized byteswap routines from the C library. - build with --disable-3dnow, do not pass -m3dnow to the compiler modern cpus do not support this instructions at all. OBS-URL: https://build.opensuse.org/request/show/606425 OBS-URL: https://build.opensuse.org/package/show/games/SDL2?expand=0&rev=80 --- SDL2-endian.patch | 191 ++++++++++++++++++++++++++++++++++++++++++++++ SDL2.changes | 8 ++ SDL2.spec | 5 +- 3 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 SDL2-endian.patch diff --git a/SDL2-endian.patch b/SDL2-endian.patch new file mode 100644 index 0000000..2004405 --- /dev/null +++ b/SDL2-endian.patch @@ -0,0 +1,191 @@ +Index: SDL2-2.0.8/include/SDL_endian.h +=================================================================== +--- SDL2-2.0.8.orig/include/SDL_endian.h ++++ SDL2-2.0.8/include/SDL_endian.h +@@ -34,29 +34,17 @@ + * \name The two types of endianness + */ + /* @{ */ +-#define SDL_LIL_ENDIAN 1234 +-#define SDL_BIG_ENDIAN 4321 ++#define SDL_LIL_ENDIAN __ORDER_LITTLE_ENDIAN__ ++#define SDL_BIG_ENDIAN __ORDER_BIG_ENDIAN__ + /* @} */ + + #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +-#ifdef __linux__ +-#include +-#define SDL_BYTEORDER __BYTE_ORDER +-#else /* __linux__ */ +-#if defined(__hppa__) || \ +- defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ +- (defined(__MIPS__) && defined(__MISPEB__)) || \ +- defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ +- defined(__sparc__) +-#define SDL_BYTEORDER SDL_BIG_ENDIAN +-#else +-#define SDL_BYTEORDER SDL_LIL_ENDIAN +-#endif +-#endif /* __linux__ */ ++#define SDL_BYTEORDER __BYTE_ORDER__ + #endif /* !SDL_BYTEORDER */ + + + #include "begin_code.h" ++#include + /* Set up for C function definitions, even when using C++ */ + #ifdef __cplusplus + extern "C" { +@@ -65,149 +53,23 @@ extern "C" { + /** + * \file SDL_endian.h + */ +-#if defined(__GNUC__) && defined(__i386__) && \ +- !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) + SDL_FORCE_INLINE Uint16 + SDL_Swap16(Uint16 x) + { +- __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); +- return x; ++ return bswap_16(x); + } +-#elif defined(__GNUC__) && defined(__x86_64__) +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); +- return x; +-} +-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +-SDL_FORCE_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(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +-SDL_FORCE_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 +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +-} +-#endif +- +-#if defined(__GNUC__) && defined(__i386__) + SDL_FORCE_INLINE Uint32 + SDL_Swap32(Uint32 x) + { +- __asm__("bswap %0": "=r"(x):"0"(x)); +- return x; ++ return bswap_32(x); + } +-#elif defined(__GNUC__) && defined(__x86_64__) +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- __asm__("bswapl %0": "=r"(x):"0"(x)); +- return x; +-} +-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +-SDL_FORCE_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(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +-SDL_FORCE_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 +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | +- ((x >> 8) & 0x0000FF00) | (x >> 24))); +-} +-#endif + +-#if defined(__GNUC__) && defined(__i386__) +-SDL_FORCE_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__) +-SDL_FORCE_INLINE Uint64 +-SDL_Swap64(Uint64 x) +-{ +- __asm__("bswapq %0": "=r"(x):"0"(x)); +- return x; +-} +-#else + SDL_FORCE_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); ++ return bswap_64(x); + } +-#endif +- + + SDL_FORCE_INLINE float + SDL_SwapFloat(float x) diff --git a/SDL2.changes b/SDL2.changes index 65da073..4e856d4 100644 --- a/SDL2.changes +++ b/SDL2.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri May 11 11:08:39 UTC 2018 - crrodriguez@opensuse.org + +- SDL2-endian.patch: bring up patch from SDL1, use optimized + byteswap routines from the C library. +- build with --disable-3dnow, do not pass -m3dnow to the compiler + modern cpus do not support this instructions at all. + ------------------------------------------------------------------- Sat Mar 17 10:14:15 UTC 2018 - ytz1995@hotmail.com diff --git a/SDL2.spec b/SDL2.spec index 5573769..7575ab8 100644 --- a/SDL2.spec +++ b/SDL2.spec @@ -31,6 +31,7 @@ Source2: http://libsdl.org/release/%name-%version.tar.gz.sig Source3: %name.keyring Source4: baselibs.conf Patch1: sdl2-symvers.patch +Patch2: SDL2-endian.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: dos2unix @@ -110,6 +111,7 @@ library. %prep %setup -q %patch -P 1 -p1 +%patch -P 2 -p1 dos2unix WhatsNew.txt dos2unix TODO.txt dos2unix BUGS.txt @@ -129,7 +131,8 @@ dos2unix COPYING.txt --enable-sse2=no \ %endif --enable-sse3=no \ - --disable-rpath + --disable-rpath \ + --disable-3dnow make %{?_smp_mflags} V=1 %install