From a236082d89f29f46fa803a71c0337fab7a43fe97 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 5 Feb 2007 06:44:51 +0000 Subject: [PATCH] Patched to compile on BeOS and old, old GCC releases. --- include/SDL_endian.h | 8 +++++--- src/video/SDL_blit.c | 10 +++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/SDL_endian.h b/include/SDL_endian.h index 6257a649d..8f8db4cca 100644 --- a/include/SDL_endian.h +++ b/include/SDL_endian.h @@ -56,7 +56,7 @@ 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 */) + !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) static __inline__ Uint16 SDL_Swap16(Uint16 x) { __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x)); @@ -88,7 +88,8 @@ static __inline__ Uint16 SDL_Swap16(Uint16 x) { } #endif -#if defined(__GNUC__) && defined(__i386__) +#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)); @@ -123,7 +124,8 @@ static __inline__ Uint32 SDL_Swap32(Uint32 x) { #endif #ifdef SDL_HAS_64BIT_TYPE -#if defined(__GNUC__) && defined(__i386__) +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) static __inline__ Uint64 SDL_Swap64(Uint64 x) { union { diff --git a/src/video/SDL_blit.c b/src/video/SDL_blit.c index d3fb7783e..fee473891 100644 --- a/src/video/SDL_blit.c +++ b/src/video/SDL_blit.c @@ -29,6 +29,9 @@ #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && SDL_ASSEMBLY_ROUTINES #define MMX_ASMBLIT +#if (__GNUC__ > 2) /* SSE instructions aren't in GCC 2. */ +#define SSE_ASMBLIT +#endif #endif #if defined(MMX_ASMBLIT) @@ -122,6 +125,7 @@ static __inline__ void SDL_memcpyMMX(Uint8 *to, const Uint8 *from, int len) SDL_memcpy(to, from, len&7); } +#ifdef SSE_ASMBLIT static __inline__ void SDL_memcpySSE(Uint8 *to, const Uint8 *from, int len) { int i; @@ -146,6 +150,7 @@ static __inline__ void SDL_memcpySSE(Uint8 *to, const Uint8 *from, int len) SDL_memcpy(to, from, len&7); } #endif +#endif static void SDL_BlitCopy(SDL_BlitInfo *info) { @@ -159,7 +164,8 @@ static void SDL_BlitCopy(SDL_BlitInfo *info) dst = info->d_pixels; srcskip = w+info->s_skip; dstskip = w+info->d_skip; -#ifdef MMX_ASMBLIT + +#ifdef SSE_ASMBLIT if(SDL_HasSSE()) { while ( h-- ) { @@ -172,6 +178,8 @@ static void SDL_BlitCopy(SDL_BlitInfo *info) ::); } else +#endif +#ifdef MMX_ASMBLIT if(SDL_HasMMX()) { while ( h-- ) {