Patched to compile on BeOS and old, old GCC releases. SDL-1.2
authorRyan C. Gordon <icculus@icculus.org>
Mon, 05 Feb 2007 06:44:51 +0000
branchSDL-1.2
changeset 3909 6832b00d3594
parent 3908 6e41f5d80198
child 3910 af4d584e0edb
Patched to compile on BeOS and old, old GCC releases.
include/SDL_endian.h
src/video/SDL_blit.c
--- a/include/SDL_endian.h	Sat Feb 03 08:17:12 2007 +0000
+++ b/include/SDL_endian.h	Mon Feb 05 06:44:51 2007 +0000
@@ -56,7 +56,7 @@
    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 @@
 }
 #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 @@
 #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 { 
--- a/src/video/SDL_blit.c	Sat Feb 03 08:17:12 2007 +0000
+++ b/src/video/SDL_blit.c	Mon Feb 05 06:44:51 2007 +0000
@@ -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 @@
 		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 @@
 		SDL_memcpy(to, from, len&7);
 }
 #endif
+#endif
 
 static void SDL_BlitCopy(SDL_BlitInfo *info)
 {
@@ -159,7 +164,8 @@
 	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 @@
 		::);
 	}
 	else
+#endif
+#ifdef MMX_ASMBLIT
 	if(SDL_HasMMX())
 	{
 		while ( h-- ) {