Fix building with gcc-4 #104437, fixes for PIC issues from PaX team, and fix segfault...
authorMike Frysinger <vapier@gentoo.org>
Thu, 29 Sep 2005 09:47:26 +0000 (09:47 +0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 29 Sep 2005 09:47:26 +0000 (09:47 +0000)
Package-Manager: portage-2.0.52-r1 http://www.bash.org/?136501

media-libs/libsdl/ChangeLog
media-libs/libsdl/Manifest
media-libs/libsdl/files/digest-libsdl-1.2.9-r1 [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-PIC-SDL_stretch.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-cpuid.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-gcc-mmx.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-no-exec-stack.patch [new file with mode: 0644]
media-libs/libsdl/files/libsdl-1.2.9-sdl-blit-mmx-check.patch [new file with mode: 0644]
media-libs/libsdl/libsdl-1.2.9-r1.ebuild [new file with mode: 0644]

index 868992efaaef3efcc7701bfd3cc6187c3edbabec..00e4470f9cb9e2759c053410c0807c5aa84658c0 100644 (file)
@@ -1,6 +1,19 @@
 # ChangeLog for media-libs/libsdl
 # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/ChangeLog,v 1.88 2005/09/28 04:05:36 kito Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/ChangeLog,v 1.89 2005/09/29 09:47:26 vapier Exp $
+
+*libsdl-1.2.9-r1 (29 Sep 2005)
+
+  29 Sep 2005; Mike Frysinger <vapier@gentoo.org>
+  +files/libsdl-1.2.9-PIC-SDL_stretch.patch,
+  +files/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch,
+  +files/libsdl-1.2.9-PIC-hermes-cpuid.patch,
+  +files/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch,
+  +files/libsdl-1.2.9-gcc-mmx.patch,
+  +files/libsdl-1.2.9-no-exec-stack.patch,
+  +files/libsdl-1.2.9-sdl-blit-mmx-check.patch, +libsdl-1.2.9-r1.ebuild:
+  Fix building with gcc-4 #104437, fixes for PIC issues from PaX team, and fix
+  segfault in bomberclone #104533.
 
   28 Sep 2005; Kito <kito@gentoo.org> libsdl-1.2.9.ebuild:
   remove unneeded macos append-flags.
index ce2609a74945b08da312e55838b86a866602cb9b..ba4b660b03417be5b80b385a482250c03b018557 100644 (file)
@@ -1,31 +1,50 @@
-MD5 5a3b1db563c07299a17b96393a4592e4 ChangeLog 13543
-MD5 cbbab78f5125f834ffb0f83be4957736 libsdl-1.2.6-r3.ebuild 3013
-MD5 7f079469132865bdd25780277639f098 libsdl-1.2.7-r3.ebuild 3960
-MD5 4e4caa64c5b89522b2f0e284282eafe6 libsdl-1.2.8-r1.ebuild 5004
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
 MD5 baaaa69f33ef9027dac84ee4ff02773b metadata.xml 974
 MD5 a7bcf0ea25253af8bba0031c22f14e5b libsdl-1.2.9.ebuild 4215
-MD5 0c2020ec3ce37ea0612064c52d1014b1 files/1.2.6-alsa-1.0.0.patch 557
-MD5 4f1ce33c931d461bed06277f60341085 files/1.2.6-nobuggy-X.patch 568
-MD5 71a857d2bbcc34c4807638eb5d710f2e files/1.2.7-26headers.patch 1017
-MD5 206ddd08dd3e33819d03245d11af3014 files/1.2.7-gcc34.patch 8196
+MD5 7f079469132865bdd25780277639f098 libsdl-1.2.7-r3.ebuild 3960
+MD5 cbbab78f5125f834ffb0f83be4957736 libsdl-1.2.6-r3.ebuild 3013
+MD5 9cd04ba228704f38838643e7debe2504 libsdl-1.2.9-r1.ebuild 4642
+MD5 4e4caa64c5b89522b2f0e284282eafe6 libsdl-1.2.8-r1.ebuild 5004
+MD5 75e0d655c427e1834806056f681ffdde ChangeLog 14100
+MD5 4f1ce33c931d461bed06277f60341085 files/1.2.8-nobuggy-X.patch 568
+MD5 e0c6c6ffc15475282fc864b8f52f0abf files/1.2.8-linux26.patch 1268
+MD5 25b8b048d7e5d2a6edc59a66f34566e7 files/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch 3901
+MD5 614874c27d89a83dba0cf9754f6fad6e files/digest-libsdl-1.2.9-r1 62
+MD5 abb743f69a1f916ab59e02fe9e6ee46a files/libsdl-1.2.9-sdl-blit-mmx-check.patch 527
+MD5 327bae5c9d159acaa55b2da63c3ee561 files/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch 4928
+MD5 c214458f3c67b5451a5f305a2532ce64 files/libsdl-1.2.9-PIC-hermes-cpuid.patch 452
 MD5 e71ab5ce20cb7c70631a59f9d209cce1 files/1.2.7-joystick.patch 1317
+MD5 4f1ce33c931d461bed06277f60341085 files/1.2.6-nobuggy-X.patch 568
+MD5 4ce5ec18eafcf0b1c6caf31c9f67cb1d files/digest-libsdl-1.2.8-r1 62
+MD5 419d8c241f85b4deba895c615faa5612 files/libsdl-1.2.6-fullscreen.patch 1094
 MD5 abf0c6fe9d93e5b0cc9a4dbb6d93ad87 files/1.2.7-joystick2.patch 16196
+MD5 614874c27d89a83dba0cf9754f6fad6e files/digest-libsdl-1.2.9 62
+MD5 71a857d2bbcc34c4807638eb5d710f2e files/1.2.7-26headers.patch 1017
 MD5 803844293dc7df2bb7d2323c03977b71 files/1.2.7-libcaca.patch 23266
-MD5 4f1ce33c931d461bed06277f60341085 files/1.2.7-nobuggy-X.patch 568
-MD5 5d1fcf4587b0ce9cd723aa69f9ef7dba files/1.2.8-amd64-endian.patch 651
-MD5 e6471a33cb0d62a807640ef3eccffb5f files/1.2.8-direct-8bit-color.patch 7414
-MD5 323ad5b1e83521630dd4d54819c5efbd files/1.2.8-gcc2.patch 743
+MD5 27b5c7cf673424d9c9ce5e26d5031385 files/libsdl-1.2.9-gcc-mmx.patch 15320
+MD5 0c2020ec3ce37ea0612064c52d1014b1 files/1.2.6-alsa-1.0.0.patch 557
 MD5 4e92be33d24fa96149b0e68eb916e259 files/1.2.8-gcc4.patch 6875
-MD5 60ecfde6cc7b734ef03b93357c537674 files/1.2.8-keyrepeat.patch 598
-MD5 e0c6c6ffc15475282fc864b8f52f0abf files/1.2.8-linux26.patch 1268
-MD5 4f1ce33c931d461bed06277f60341085 files/1.2.8-nobuggy-X.patch 568
-MD5 b66ce90b8939cef871c1c9b065fc0658 files/digest-libsdl-1.2.6-r3 62
 MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7-r3 62
-MD5 4ce5ec18eafcf0b1c6caf31c9f67cb1d files/digest-libsdl-1.2.8-r1 62
-MD5 419d8c241f85b4deba895c615faa5612 files/libsdl-1.2.6-fullscreen.patch 1094
-MD5 358c3d6380bf0b6ba3e78ce47c5ec578 files/libsdl-1.2.8-gcc2.patch.bz2 2639
+MD5 e6471a33cb0d62a807640ef3eccffb5f files/1.2.8-direct-8bit-color.patch 7414
+MD5 d2658d344345e29d331c165e281b4b87 files/libsdl-1.2.9-no-exec-stack.patch 956
+MD5 2ce49535d1db8c32ba4345ecc63eee24 files/libsdl-1.2.9-PIC-SDL_stretch.patch 396
 MD5 ebca26b8a60c4c68471691ab7bd9271e files/libsdl-1.2.8-libcaca.patch 19418
+MD5 4f1ce33c931d461bed06277f60341085 files/1.2.7-nobuggy-X.patch 568
 MD5 14e090fd7a72ed528972ddc8b6a90fb4 files/libsdl-1.2.8-no-cxx.patch 688
+MD5 b66ce90b8939cef871c1c9b065fc0658 files/digest-libsdl-1.2.6-r3 62
+MD5 5d1fcf4587b0ce9cd723aa69f9ef7dba files/1.2.8-amd64-endian.patch 651
+MD5 358c3d6380bf0b6ba3e78ce47c5ec578 files/libsdl-1.2.8-gcc2.patch.bz2 2639
+MD5 323ad5b1e83521630dd4d54819c5efbd files/1.2.8-gcc2.patch 743
+MD5 60ecfde6cc7b734ef03b93357c537674 files/1.2.8-keyrepeat.patch 598
 MD5 5b76156f2699a03a798bd4ed9b0f4233 files/libsdl-1.2.8-sdl-config.patch 738
-MD5 614874c27d89a83dba0cf9754f6fad6e files/digest-libsdl-1.2.9 62
 MD5 7fd44027d68e34cfdd399e23931caa94 files/libsdl-1.2.9-dlvsym-check.patch 907
+MD5 206ddd08dd3e33819d03245d11af3014 files/1.2.7-gcc34.patch 8196
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+iD8DBQFDO7h1gIKl8Uu19MoRAmKMAJ45GY/IM4KtUBd5owGL6D8EKeI5OgCfSnnP
+risiSIC1cYRgIPKP+xHd1m4=
+=cGk2
+-----END PGP SIGNATURE-----
diff --git a/media-libs/libsdl/files/digest-libsdl-1.2.9-r1 b/media-libs/libsdl/files/digest-libsdl-1.2.9-r1
new file mode 100644 (file)
index 0000000..c3c1f27
--- /dev/null
@@ -0,0 +1 @@
+MD5 80919ef556425ff82a8555ff40a579a0 SDL-1.2.9.tar.gz 2688179
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-PIC-SDL_stretch.patch b/media-libs/libsdl/files/libsdl-1.2.9-PIC-SDL_stretch.patch
new file mode 100644 (file)
index 0000000..bff7112
--- /dev/null
@@ -0,0 +1,16 @@
+Kill off TEXTREL in SDL_SoftStretch()
+
+--- src/video/SDL_stretch.c
++++ src/video/SDL_stretch.c
+@@ -286,9 +286,9 @@ int SDL_SoftStretch(SDL_Surface *src, SD
+                   default:
+ #ifdef __GNUC__
+                       __asm__ __volatile__ (
+-                      "call _copy_row"
++                      "call *%4"
+                       : "=&D" (u1), "=&S" (u2)
+-                      : "0" (dstp), "1" (srcp)
++                      : "0" (dstp), "1" (srcp), "r" (&_copy_row)
+                       : "memory" );
+ #else
+ #ifdef WIN32
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch b/media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch
new file mode 100644 (file)
index 0000000..6dc9aef
--- /dev/null
@@ -0,0 +1,350 @@
+Fixes from PaX team to eliminate TEXTRELs in hermes code
+
+--- src/hermes/mmx_main.asm
++++ src/hermes/mmx_main.asm
+@@ -10,7 +10,6 @@
+ BITS 32
+ 
+ GLOBAL _ConvertMMX
+-GLOBAL _mmxreturn
+ 
+ 
+ SECTION .text
+@@ -50,9 +49,8 @@ _ConvertMMX:
+ y_loop:       
+       mov ecx,[ebp+4]
+ 
+-      jmp [ebp+32]
++      call [ebp+32]
+ 
+-_mmxreturn:   
+       add esi,[ebp+12]
+       add edi,[ebp+28]
+       
+--- src/hermes/x86_main.asm
++++ src/hermes/x86_main.asm
+@@ -12,7 +12,6 @@
+ BITS 32
+ 
+ GLOBAL _ConvertX86
+-GLOBAL _x86return
+       
+ GLOBAL _Hermes_X86_CPU
+ 
+@@ -54,9 +53,8 @@
+ y_loop:       
+       mov ecx,[ebp+4]
+ 
+-      jmp [ebp+32]
++      call [ebp+32]
+ 
+-_x86return:   
+       add esi,[ebp+12]
+       add edi,[ebp+28]
+       
+--- src/hermes/x86p_16.asm
++++ src/hermes/x86p_16.asm
+@@ -25,7 +25,6 @@ GLOBAL _ConvertX86p16_16BGR555
+ GLOBAL _ConvertX86p16_8RGB332
+ 
+ EXTERN _ConvertX86
+-EXTERN _x86return
+ 
+ 
+ SECTION .text
+@@ -57,7 +56,7 @@ _ConvertX86p16_16BGR565:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; head
+     mov eax,edi
+@@ -135,7 +134,7 @@ _ConvertX86p16_16BGR565:
+     add edi,BYTE 2
+ 
+ .L7
+-    jmp _x86return
++    retn
+ 
+ 
+ 
+@@ -164,7 +163,7 @@ _ConvertX86p16_16RGB555:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; head
+     mov eax,edi
+@@ -243,7 +242,7 @@ _ConvertX86p16_16RGB555:
+     jmp SHORT .L6
+ 
+ .L7 pop ebp
+-    jmp _x86return
++    retn
+ 
+ 
+ 
+@@ -277,7 +276,7 @@ _ConvertX86p16_16BGR555:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; head
+     mov eax,edi
+@@ -361,7 +360,7 @@ _ConvertX86p16_16BGR555:
+     add edi,BYTE 2
+ 
+ .L7
+-    jmp _x86return
++    retn
+ 
+ 
+ 
+@@ -394,7 +393,7 @@ _ConvertX86p16_8RGB332:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 mov eax,edi
+     and eax,BYTE 11b
+@@ -492,5 +491,5 @@ _ConvertX86p16_8RGB332:
+     jnz .L6
+ 
+ .L7 pop ebp
+-    jmp _x86return
++    retn
+ 
+--- src/hermes/x86p_32.asm
++++ src/hermes/x86p_32.asm
+@@ -23,8 +23,7 @@ GLOBAL _ConvertX86p32_16RGB555
+ GLOBAL _ConvertX86p32_16BGR555
+ GLOBAL _ConvertX86p32_8RGB332
+ 
+-EXTERN _x86return
+-              
++
+ SECTION .text
+ 
+ 
+@@ -53,7 +52,7 @@ _ConvertX86p32_32BGR888:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; save ebp
+     push ebp
+@@ -113,7 +112,7 @@ _ConvertX86p32_32BGR888:
+     jnz .L5
+ 
+ .L6 pop ebp
+-    jmp _x86return
++    retn
+       
+ 
+       
+@@ -133,7 +132,7 @@ _ConvertX86p32_32RGBA888:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; save ebp
+     push ebp
+@@ -184,7 +183,7 @@ _ConvertX86p32_32RGBA888:
+     jnz .L5
+ 
+ .L6 pop ebp
+-    jmp _x86return
++    retn
+ 
+       
+ 
+@@ -204,7 +203,7 @@ _ConvertX86p32_32BGRA888:
+     dec ecx
+     jnz .L1
+ .L2
+-    jmp _x86return
++    retn
+ 
+ .L3 ; save ebp
+     push ebp
+@@ -257,7 +256,7 @@ _ConvertX86p32_32BGRA888:
+     jnz .L5
+ 
+ .L6 pop ebp
+-    jmp _x86return
++    retn
+ 
+ 
+       
+@@ -282,7 +281,7 @@ _ConvertX86p32_24RGB888:
+       dec ecx
+       jnz .L1
+ .L2 
+-      jmp _x86return
++      retn
+ 
+ .L3   ;        head
+       mov edx,edi
+@@ -354,7 +353,7 @@ _ConvertX86p32_24RGB888:
+       jnz .L6
+ 
+ .L7   pop ebp
+-      jmp _x86return
++      retn
+ 
+ 
+ 
+@@ -380,7 +379,7 @@ _ConvertX86p32_24BGR888:
+       dec ecx
+       jnz .L1
+ .L2
+-      jmp _x86return
++      retn
+ 
+ .L3 ; head
+       mov edx,edi
+@@ -455,7 +454,7 @@ _ConvertX86p32_24BGR888:
+ 
+ .L7 
+       pop ebp
+-      jmp _x86return
++      retn
+  
+ 
+       
+@@ -484,7 +483,7 @@ _ConvertX86p32_16RGB565:
+       jnz .L1
+ 
+ .L2:                          ; End of short loop
+-      jmp _x86return
++      retn
+ 
+       
+ .L3   ; head
+@@ -570,7 +569,7 @@ _ConvertX86p32_16RGB565:
+       add edi,BYTE 2
+ 
+ .L7:  
+-      jmp _x86return
++      retn
+ 
+ 
+ 
+@@ -599,7 +598,7 @@ _ConvertX86p32_16BGR565:
+       dec ecx
+       jnz .L1
+ .L2
+-      jmp _x86return
++      retn
+ 
+ .L3   ; head
+       mov ebx,edi
+@@ -684,7 +683,7 @@ _ConvertX86p32_16BGR565:
+       add edi,BYTE 2
+ 
+ .L7 
+-      jmp _x86return
++      retn
+ 
+ 
+       
+@@ -713,7 +712,7 @@ _ConvertX86p32_16RGB555:
+       dec ecx
+       jnz .L1
+ .L2
+-      jmp _x86return
++      retn
+ 
+ .L3   ; head
+       mov ebx,edi
+@@ -795,7 +794,7 @@ _ConvertX86p32_16RGB555:
+       add edi,BYTE 2
+ 
+ .L7
+-      jmp _x86return
++      retn
+ 
+ 
+ 
+@@ -825,7 +824,7 @@ _ConvertX86p32_16BGR555:
+       dec ecx
+       jnz .L1
+ .L2 
+-      jmp _x86return
++      retn
+ 
+ .L3   ; head
+       mov ebx,edi
+@@ -910,7 +909,7 @@ _ConvertX86p32_16BGR555:
+       add edi,BYTE 2
+ 
+ .L7
+-      jmp _x86return
++      retn
+ 
+ 
+ 
+@@ -1040,5 +1039,5 @@ _ConvertX86p32_8RGB332:
+       jnz .L3
+       
+ .L4:  
+-      jmp _x86return
++      retn
+ 
+--- src/hermes/mmxp2_32.asm
++++ src/hermes/mmxp2_32.asm
+@@ -27,8 +27,6 @@ GLOBAL _ConvertMMXpII32_16BGR565
+ GLOBAL _ConvertMMXpII32_16RGB555
+ GLOBAL _ConvertMMXpII32_16BGR555
+ 
+-EXTERN _mmxreturn
+- 
+ SECTION .data
+       
+ ALIGN 8
+@@ -108,7 +98,7 @@ _ConvertMMXpII32_24RGB888:
+         dec ecx
+         jnz .L3
+ .L4:
+-        jmp _mmxreturn
++        return
+ 
+ 
+ 
+@@ -176,7 +173,7 @@ _ConvertMMXpII32_16RGB565:
+         jnz .L3
+ 
+ .L4:
+-      jmp _mmxreturn
++      retn
+ 
+       
+ _ConvertMMXpII32_16BGR565:
+@@ -245,7 +249,7 @@ _ConvertMMXpII32_16BGR565:
+         jnz .L3
+ 
+ .L4:
+-        jmp _mmxreturn
++        retn
+ 
+ _ConvertMMXpII32_16BGR555:
+ 
+@@ -380,5 +384,5 @@ _convert_bgr555_cheat:
+       jnz .L3 
+ 
+ .L4:          
+-      jmp _mmxreturn
++      retn
+ 
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-cpuid.patch b/media-libs/libsdl/files/libsdl-1.2.9-PIC-hermes-cpuid.patch
new file mode 100644 (file)
index 0000000..d779488
--- /dev/null
@@ -0,0 +1,37 @@
+Fixes from the PaX team to eliminate TEXTRELs
+
+--- src/hermes/x86_main.asm
++++ src/hermes/x86_main.asm
+@@ -17,11 +17,6 @@ GLOBAL _x86return
+ GLOBAL _Hermes_X86_CPU
+ 
+ 
+-SECTION .data
+-      
+-cpu_flags dd 0
+-      
+-              
+ SECTION .text
+               
+ ;; _ConvertX86:        
+@@ -110,16 +105,13 @@ _Hermes_X86_CPU:
+       xor eax,ecx
+       je .L1
+       
+-      pusha
+-      
++      push ebx
++
+       mov eax,1
+       cpuid
++      mov eax,edx
+ 
+-      mov [cpu_flags],edx
+-
+-      popa
+-
+-      mov eax,[cpu_flags]
++      pop ebx
+ 
+ .L1:  
+       ret
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch b/media-libs/libsdl/files/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch
new file mode 100644 (file)
index 0000000..9617301
--- /dev/null
@@ -0,0 +1,166 @@
+--- src/hermes/mmxp2_32.asm
++++ src/hermes/mmxp2_32.asm
+@@ -27,22 +27,37 @@ GLOBAL _ConvertMMXpII32_16BGR565
+ GLOBAL _ConvertMMXpII32_16RGB555
+ GLOBAL _ConvertMMXpII32_16BGR555
+ 
+-SECTION .data
+-      
+-ALIGN 8
+-
+-;; Constants for conversion routines
+-
+-mmx32_rgb888_mask dd 00ffffffh,00ffffffh
+-
+-mmx32_rgb565_b dd 000000f8h, 000000f8h
+-mmx32_rgb565_g dd 0000fc00h, 0000fc00h
+-mmx32_rgb565_r dd 00f80000h, 00f80000h
+-
+-mmx32_rgb555_rb dd 00f800f8h,00f800f8h
+-mmx32_rgb555_g dd 0000f800h,0000f800h
+-mmx32_rgb555_mul dd 20000008h,20000008h
+-mmx32_bgr555_mul dd 00082000h,00082000h
++
++;; Macros for conversion routines
++
++%macro _push_immq_mask 1
++      push dword %1
++      push dword %1
++%endmacro
++
++%macro load_immq 2
++      _push_immq_mask %2
++      movq %1, [esp]
++%endmacro
++
++%macro pand_immq 2
++      _push_immq_mask %2
++      pand %1, [esp]
++%endmacro
++
++%define CLEANUP_IMMQ_LOADS(num) \
++      add esp, byte 8 * num
++
++%define mmx32_rgb888_mask 00ffffffh
++
++%define mmx32_rgb565_b 000000f8h
++%define mmx32_rgb565_g 0000fc00h
++%define mmx32_rgb565_r 00f80000h
++
++%define mmx32_rgb555_rb 00f800f8h
++%define mmx32_rgb555_g 0000f800h
++%define mmx32_rgb555_mul 20000008h
++%define mmx32_bgr555_mul 00082000h
+ 
+ 
+                       
+@@ -53,7 +66,8 @@ SECTION .text
+ _ConvertMMXpII32_24RGB888:
+ 
+         ; set up mm6 as the mask, mm7 as zero
+-        movq mm6, qword [mmx32_rgb888_mask]
++        load_immq mm6, mmx32_rgb888_mask
++        CLEANUP_IMMQ_LOADS(1)
+         pxor mm7, mm7
+ 
+         mov edx, ecx                    ; save ecx
+@@ -108,9 +122,10 @@ _ConvertMMXpII32_24RGB888:
+ _ConvertMMXpII32_16RGB565:
+ 
+         ; set up masks
+-        movq mm5, [mmx32_rgb565_b]
+-        movq mm6, [mmx32_rgb565_g]
+-        movq mm7, [mmx32_rgb565_r]
++        load_immq mm5, mmx32_rgb565_b
++        load_immq mm6, mmx32_rgb565_g
++        load_immq mm7, mmx32_rgb565_r
++        CLEANUP_IMMQ_LOADS(3)
+ 
+         mov edx, ecx
+         shr ecx, 2
+@@ -176,9 +191,10 @@ _ConvertMMXpII32_16RGB565:
+       
+ _ConvertMMXpII32_16BGR565:
+ 
+-        movq mm5, [mmx32_rgb565_r]
+-        movq mm6, [mmx32_rgb565_g]
+-        movq mm7, [mmx32_rgb565_b]
++        load_immq mm5, mmx32_rgb565_r
++        load_immq mm6, mmx32_rgb565_g
++        load_immq mm7, mmx32_rgb565_b
++        CLEANUP_IMMQ_LOADS(3)
+ 
+         mov edx, ecx
+         shr ecx, 2
+@@ -253,7 +269,7 @@ _ConvertMMXpII32_16BGR555:
+         ; except it uses a different multiplier for the pmaddwd
+         ; instruction.  cool huh.
+ 
+-        movq mm7, qword [mmx32_bgr555_mul]
++        load_immq mm7, mmx32_bgr555_mul
+         jmp _convert_bgr555_cheat
+ 
+ ; This is the same as the Intel version.. they obviously went to
+@@ -263,9 +279,10 @@ _ConvertMMXpII32_16BGR555:
+ ; (I think) a more accurate name..
+ _ConvertMMXpII32_16RGB555:
+ 
+-        movq mm7,qword [mmx32_rgb555_mul]
++      load_immq mm7, mmx32_rgb555_mul
+ _convert_bgr555_cheat:
+-        movq mm6,qword [mmx32_rgb555_g]
++      load_immq mm6, mmx32_rgb555_g
++      CLEANUP_IMMQ_LOADS(2)
+         
+       mov edx,ecx                        ; Save ecx 
+ 
+@@ -280,12 +297,14 @@ _convert_bgr555_cheat:
+       movq mm0,[esi]
+       movq mm3,mm2
+ 
+-      pand mm3,qword [mmx32_rgb555_rb]
++      pand_immq mm3, mmx32_rgb555_rb
+       movq mm1,mm0
+ 
+-      pand mm1,qword [mmx32_rgb555_rb]
++      pand_immq mm1, mmx32_rgb555_rb
+       pmaddwd mm3,mm7
+ 
++      CLEANUP_IMMQ_LOADS(2)
++
+       pmaddwd mm1,mm7
+       pand mm2,mm6
+ 
+@@ -302,13 +321,13 @@ _convert_bgr555_cheat:
+       movq mm0,mm4
+       psrld mm1,6
+ 
+-      pand mm0,qword [mmx32_rgb555_rb]
++      pand_immq mm0, mmx32_rgb555_rb
+       packssdw mm1,mm3
+ 
+       movq mm3,mm5
+       pmaddwd mm0,mm7
+ 
+-      pand mm3,qword [mmx32_rgb555_rb]
++      pand_immq mm3, mmx32_rgb555_rb
+       pand mm4,mm6
+ 
+       movq [edi],mm1                  
+@@ -329,12 +348,14 @@ _convert_bgr555_cheat:
+       movq mm3,mm2
+       movq mm1,mm0
+ 
+-      pand mm3,qword [mmx32_rgb555_rb]
++      pand_immq mm3, mmx32_rgb555_rb
+       packssdw mm5,mm4
+ 
+-      pand mm1,qword [mmx32_rgb555_rb]
++      pand_immq mm1, mmx32_rgb555_rb
+       pand mm2,mm6
+ 
++      CLEANUP_IMMQ_LOADS(4)
++
+       movq [edi+8],mm5
+       pmaddwd mm3,mm7
+ 
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-gcc-mmx.patch b/media-libs/libsdl/files/libsdl-1.2.9-gcc-mmx.patch
new file mode 100644 (file)
index 0000000..2926577
--- /dev/null
@@ -0,0 +1,335 @@
+http://bugs.gentoo.org/104437
+
+get this mmx stuff to build with gcc2/gcc3/gcc4
+
+Index: src/video/SDL_yuv_mmx.c
+===================================================================
+RCS file: /home/sdlweb/libsdl.org/cvs/SDL12/src/video/SDL_yuv_mmx.c,v
+retrieving revision 1.9
+retrieving revision 1.10
+diff -u -p -r1.9 -r1.10
+--- src/video/SDL_yuv_mmx.c    13 Feb 2005 07:10:02 -0000      1.9
++++ src/video/SDL_yuv_mmx.c    28 Sep 2005 02:26:29 -0000      1.10
+@@ -30,42 +30,31 @@ static char rcsid =
+ 
+ #include "SDL_types.h"
+ 
+-#if __GNUC__ > 2
+-#    undef GCC2_HACK
+-#else
+-#    define GCC2_HACK
+-#endif
+-
+- 
+-#if defined(GCC2_HACK) && defined (__ELF__)
+-#define ASM_VAR(X) _##X
+-#else
+-#define ASM_VAR(X) X
+-#endif
++#define ASM_ARRAY(x) x[] __asm__("_" #x) __attribute__((used))
+  
+-static volatile unsigned int  ASM_VAR(MMX_0080w)[]    = {0x00800080, 0x00800080};
+-static volatile unsigned int  ASM_VAR(MMX_00FFw)[]    = {0x00ff00ff, 0x00ff00ff}; 
+-static volatile unsigned int  ASM_VAR(MMX_FF00w)[]    = {0xff00ff00, 0xff00ff00}; 
+-
+-static volatile unsigned short ASM_VAR(MMX_Ycoeff)[]  = {0x004a, 0x004a, 0x004a, 0x004a}; 
+-
+-static volatile unsigned short ASM_VAR(MMX_UbluRGB)[] = {0x0072, 0x0072, 0x0072, 0x0072};    
+-static volatile unsigned short ASM_VAR(MMX_VredRGB)[] = {0x0059, 0x0059, 0x0059, 0x0059};  
+-static volatile unsigned short ASM_VAR(MMX_UgrnRGB)[] = {0xffea, 0xffea, 0xffea, 0xffea}; 
+-static volatile unsigned short ASM_VAR(MMX_VgrnRGB)[] = {0xffd2, 0xffd2, 0xffd2, 0xffd2};  
+-
+-static volatile unsigned short ASM_VAR(MMX_Ublu5x5)[] = {0x0081, 0x0081, 0x0081, 0x0081};
+-static volatile unsigned short ASM_VAR(MMX_Vred5x5)[] = {0x0066, 0x0066, 0x0066, 0x0066};
+-static volatile unsigned short ASM_VAR(MMX_Ugrn555)[] = {0xffe7, 0xffe7, 0xffe7, 0xffe7};
+-static volatile unsigned short ASM_VAR(MMX_Vgrn555)[] = {0xffcc, 0xffcc, 0xffcc, 0xffcc};
+-static volatile unsigned short ASM_VAR(MMX_Ugrn565)[] = {0xffe8, 0xffe8, 0xffe8, 0xffe8};
+-static volatile unsigned short ASM_VAR(MMX_Vgrn565)[] = {0xffcd, 0xffcd, 0xffcd, 0xffcd};
+-
+-static volatile unsigned short ASM_VAR(MMX_red555)[]  = {0x7c00, 0x7c00, 0x7c00, 0x7c00};
+-static volatile unsigned short ASM_VAR(MMX_red565)[]  = {0xf800, 0xf800, 0xf800, 0xf800};
+-static volatile unsigned short ASM_VAR(MMX_grn555)[]  = {0x03e0, 0x03e0, 0x03e0, 0x03e0};
+-static volatile unsigned short ASM_VAR(MMX_grn565)[]  = {0x07e0, 0x07e0, 0x07e0, 0x07e0};
+-static volatile unsigned short ASM_VAR(MMX_blu5x5)[]  = {0x001f, 0x001f, 0x001f, 0x001f};
++static unsigned int  ASM_ARRAY(MMX_0080w)    = {0x00800080, 0x00800080};
++static unsigned int  ASM_ARRAY(MMX_00FFw)    = {0x00ff00ff, 0x00ff00ff};
++static unsigned int  ASM_ARRAY(MMX_FF00w)    = {0xff00ff00, 0xff00ff00};
++
++static unsigned short ASM_ARRAY(MMX_Ycoeff)  = {0x004a, 0x004a, 0x004a, 0x004a};
++
++static unsigned short ASM_ARRAY(MMX_UbluRGB) = {0x0072, 0x0072, 0x0072, 0x0072};
++static unsigned short ASM_ARRAY(MMX_VredRGB) = {0x0059, 0x0059, 0x0059, 0x0059};
++static unsigned short ASM_ARRAY(MMX_UgrnRGB) = {0xffea, 0xffea, 0xffea, 0xffea};
++static unsigned short ASM_ARRAY(MMX_VgrnRGB) = {0xffd2, 0xffd2, 0xffd2, 0xffd2};
++
++static unsigned short ASM_ARRAY(MMX_Ublu5x5) = {0x0081, 0x0081, 0x0081, 0x0081};
++static unsigned short ASM_ARRAY(MMX_Vred5x5) = {0x0066, 0x0066, 0x0066, 0x0066};
++static unsigned short ASM_ARRAY(MMX_Ugrn555) = {0xffe7, 0xffe7, 0xffe7, 0xffe7};
++static unsigned short ASM_ARRAY(MMX_Vgrn555) = {0xffcc, 0xffcc, 0xffcc, 0xffcc};
++static unsigned short ASM_ARRAY(MMX_Ugrn565) = {0xffe8, 0xffe8, 0xffe8, 0xffe8};
++static unsigned short ASM_ARRAY(MMX_Vgrn565) = {0xffcd, 0xffcd, 0xffcd, 0xffcd};
++
++static unsigned short ASM_ARRAY(MMX_red555)  = {0x7c00, 0x7c00, 0x7c00, 0x7c00};
++static unsigned short ASM_ARRAY(MMX_red565)  = {0xf800, 0xf800, 0xf800, 0xf800};
++static unsigned short ASM_ARRAY(MMX_grn555)  = {0x03e0, 0x03e0, 0x03e0, 0x03e0};
++static unsigned short ASM_ARRAY(MMX_grn565)  = {0x07e0, 0x07e0, 0x07e0, 0x07e0};
++static unsigned short ASM_ARRAY(MMX_blu5x5)  = {0x001f, 0x001f, 0x001f, 0x001f};
+ 
+ /**
+    This MMX assembler is my first assembler/MMX program ever.
+@@ -127,21 +116,12 @@ void ColorRGBDitherYV12MMX1X( int *color
+                "movd (%2), %%mm2\n"           //    0  0  0  0 l3 l2 l1 l0
+                "punpcklbw %%mm7,%%mm1\n" //         0  v3 0  v2 00 v1 00 v0
+                "punpckldq %%mm1,%%mm1\n" //         00 v1 00 v0 00 v1 00 v0
+-#ifdef GCC2_HACK
+                "psubw _MMX_0080w,%%mm1\n"  // mm1-128:r1 r1 r0 r0 r1 r1 r0 r0 
+-#else
+-               "psubw %[_MMX_0080w],%%mm1\n"  // mm1-128:r1 r1 r0 r0 r1 r1 r0 r0 
+-#endif
+ 
+                // create Cr_g (result in mm0)
+                "movq %%mm1,%%mm0\n"           // r1 r1 r0 r0 r1 r1 r0 r0
+-#ifdef GCC2_HACK
+                "pmullw _MMX_VgrnRGB,%%mm0\n"// red*-46dec=0.7136*64
+                "pmullw _MMX_VredRGB,%%mm1\n"// red*89dec=1.4013*64
+-#else
+-               "pmullw %[_MMX_VgrnRGB],%%mm0\n"// red*-46dec=0.7136*64
+-               "pmullw %[_MMX_VredRGB],%%mm1\n"// red*89dec=1.4013*64
+-#endif
+                "psraw  $6, %%mm0\n"           // red=red/64
+                "psraw  $6, %%mm1\n"           // red=red/64
+                
+@@ -150,13 +130,8 @@ void ColorRGBDitherYV12MMX1X( int *color
+                "movq (%2,%4),%%mm3\n"         //    0  0  0  0 L3 L2 L1 L0
+                "punpckldq %%mm3,%%mm2\n"      //   L3 L2 L1 L0 l3 l2 l1 l0
+                "movq %%mm2,%%mm4\n"           //   L3 L2 L1 L0 l3 l2 l1 l0
+-#ifdef GCC2_HACK
+                "pand _MMX_FF00w,%%mm2\n"      //   L3 0  L1  0 l3  0 l1  0
+                "pand _MMX_00FFw,%%mm4\n"      //   0  L2  0 L0  0 l2  0 l0
+-#else
+-               "pand %[_MMX_FF00w],%%mm2\n"      //   L3 0  L1  0 l3  0 l1  0
+-               "pand %[_MMX_00FFw],%%mm4\n"      //   0  L2  0 L0  0 l2  0 l0
+-#endif
+                "psrlw $8,%%mm2\n"             //   0  L3  0 L1  0 l3  0 l1
+ 
+                // create R (result in mm6)
+@@ -173,20 +148,11 @@ void ColorRGBDitherYV12MMX1X( int *color
+                "movd (%1), %%mm1\n"      //         0  0  0  0  u3 u2 u1 u0
+                "punpcklbw %%mm7,%%mm1\n" //         0  u3 0  u2 00 u1 00 u0
+                "punpckldq %%mm1,%%mm1\n" //         00 u1 00 u0 00 u1 00 u0
+-#ifdef GCC2_HACK
+                "psubw _MMX_0080w,%%mm1\n"  // mm1-128:u1 u1 u0 u0 u1 u1 u0 u0 
+-#else
+-               "psubw %[_MMX_0080w],%%mm1\n"  // mm1-128:u1 u1 u0 u0 u1 u1 u0 u0 
+-#endif
+                // create Cb_g (result in mm5)
+                "movq %%mm1,%%mm5\n"            // u1 u1 u0 u0 u1 u1 u0 u0
+-#ifdef GCC2_HACK
+                "pmullw _MMX_UgrnRGB,%%mm5\n"    // blue*-109dec=1.7129*64
+                "pmullw _MMX_UbluRGB,%%mm1\n"    // blue*114dec=1.78125*64
+-#else
+-               "pmullw %[_MMX_UgrnRGB],%%mm5\n"    // blue*-109dec=1.7129*64
+-               "pmullw %[_MMX_UbluRGB],%%mm1\n"    // blue*114dec=1.78125*64
+-#endif
+                "psraw  $6, %%mm5\n"            // blue=red/64
+                "psraw  $6, %%mm1\n"            // blue=blue/64
+ 
+@@ -268,17 +234,7 @@ void ColorRGBDitherYV12MMX1X( int *color
+                "popl %%ebx\n"
+                :
+                : "m" (cr), "r"(cb),"r"(lum),
+-               "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod)
+-#ifndef GCC2_HACK
+-               ,[_MMX_0080w] "m" (*MMX_0080w),
+-               [_MMX_00FFw] "m" (*MMX_00FFw),
+-               [_MMX_FF00w] "m" (*MMX_FF00w),
+-               [_MMX_VgrnRGB] "m" (*MMX_VgrnRGB),
+-               [_MMX_VredRGB] "m" (*MMX_VredRGB),
+-               [_MMX_UgrnRGB] "m" (*MMX_UgrnRGB),
+-               [_MMX_UbluRGB] "m" (*MMX_UbluRGB)
+-#endif
+-                       );
++               "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod));
+ }
+ 
+ void Color565DitherYV12MMX1X( int *colortab, Uint32 *rgb_2_pix,
+@@ -307,48 +263,21 @@ void Color565DitherYV12MMX1X( int *color
+          "movd           (%%ebx),                %%mm1\n" // 4 Cr                0  0  0  0 v3 v2 v1 v0
+          "punpcklbw      %%mm7,                  %%mm0\n" // 4 W cb   0 u3  0 u2  0 u1  0 u0
+          "punpcklbw      %%mm7,                  %%mm1\n" // 4 W cr   0 v3  0 v2  0 v1  0 v0
+-#ifdef GCC2_HACK
+          "psubw          _MMX_0080w,             %%mm0\n"
+          "psubw          _MMX_0080w,             %%mm1\n"
+-#else
+-         "psubw          %[_MMX_0080w],             %%mm0\n"
+-         "psubw          %[_MMX_0080w],             %%mm1\n"
+-#endif
+          "movq           %%mm0,                  %%mm2\n" // Cb                   0 u3  0 u2  0 u1  0 u0
+          "movq           %%mm1,                  %%mm3\n" // Cr
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ugrn565,           %%mm2\n" // Cb2green 0 R3  0 R2  0 R1  0 R0
+-#else
+-         "pmullw         %[_MMX_Ugrn565],           %%mm2\n" // Cb2green 0 R3  0 R2  0 R1  0 R0
+-#endif
+          "movq           (%2),                   %%mm6\n" // L1      l7 L6 L5 L4 L3 L2 L1 L0
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ublu5x5,           %%mm0\n" // Cb2blue
+          "pand           _MMX_00FFw,             %%mm6\n" // L1      00 L6 00 L4 00 L2 00 L0
+          "pmullw         _MMX_Vgrn565,           %%mm3\n" // Cr2green
+-#else
+-         "pmullw         %[_MMX_Ublu5x5],           %%mm0\n" // Cb2blue
+-         "pand           %[_MMX_00FFw],             %%mm6\n" // L1      00 L6 00 L4 00 L2 00 L0
+-         "pmullw         %[_MMX_Vgrn565],           %%mm3\n" // Cr2green
+-#endif
+          "movq           (%2),                   %%mm7\n" // L2
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Vred5x5,           %%mm1\n" // Cr2red
+-#else
+-         "pmullw         %[_MMX_Vred5x5],           %%mm1\n" // Cr2red
+-#endif
+          "psrlw          $8,                     %%mm7\n"        // L2           00 L7 00 L5 00 L3 00 L1
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ycoeff,            %%mm6\n" // lum1
+-#else
+-         "pmullw         %[_MMX_Ycoeff],            %%mm6\n" // lum1
+-#endif
+          "paddw          %%mm3,                  %%mm2\n" // Cb2green + Cr2green == green
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ycoeff,            %%mm7\n" // lum2
+-#else
+-         "pmullw         %[_MMX_Ycoeff],            %%mm7\n" // lum2
+-#endif
+ 
+          "movq           %%mm6,                  %%mm4\n" // lum1
+          "paddw          %%mm0,                  %%mm6\n" // lum1 +blue 00 B6 00 B4 00 B2 00 B0
+@@ -366,20 +295,11 @@ void Color565DitherYV12MMX1X( int *color
+          "punpcklbw      %%mm4,                  %%mm4\n"
+          "punpcklbw      %%mm5,                  %%mm5\n"
+ 
+-#ifdef GCC2_HACK
+          "pand           _MMX_red565,            %%mm4\n"
+-#else
+-         "pand           %[_MMX_red565],            %%mm4\n"
+-#endif
+          "psllw          $3,                     %%mm5\n" // GREEN       1
+          "punpcklbw      %%mm6,                  %%mm6\n"
+-#ifdef GCC2_HACK
+          "pand           _MMX_grn565,            %%mm5\n"
+          "pand           _MMX_red565,            %%mm6\n"
+-#else
+-         "pand           %[_MMX_grn565],            %%mm5\n"
+-         "pand           %[_MMX_red565],            %%mm6\n"
+-#endif
+          "por            %%mm5,                  %%mm4\n" //
+          "psrlw          $11,                    %%mm6\n" // BLUE        1
+          "movq           %%mm3,                  %%mm5\n" // lum2
+@@ -393,44 +313,23 @@ void Color565DitherYV12MMX1X( int *color
+          "packuswb       %%mm3,                  %%mm3\n"
+          "packuswb       %%mm5,                  %%mm5\n"
+          "packuswb       %%mm7,                  %%mm7\n"
+-#ifdef GCC2_HACK
+          "pand           _MMX_00FFw,             %%mm6\n" // L3
+-#else
+-         "pand           %[_MMX_00FFw],             %%mm6\n" // L3
+-#endif
+          "punpcklbw      %%mm3,                  %%mm3\n"
+          "punpcklbw      %%mm5,                  %%mm5\n"
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ycoeff,            %%mm6\n" // lum3
+-#else
+-         "pmullw         %[_MMX_Ycoeff],            %%mm6\n" // lum3
+-#endif
+          "punpcklbw      %%mm7,                  %%mm7\n"
+          "psllw          $3,                     %%mm5\n" // GREEN 2
+-#ifdef GCC2_HACK
+          "pand           _MMX_red565,            %%mm7\n"
+          "pand           _MMX_red565,            %%mm3\n"
+-#else
+-         "pand           %[_MMX_red565],            %%mm7\n"
+-         "pand           %[_MMX_red565],            %%mm3\n"
+-#endif
+          "psrlw          $11,                    %%mm7\n" // BLUE  2
+-#ifdef GCC2_HACK
+          "pand           _MMX_grn565,            %%mm5\n"
+-#else
+-         "pand           %[_MMX_grn565],            %%mm5\n"
+-#endif
+          "por            %%mm7,                  %%mm3\n"
+          "movq           (%2,%4),                %%mm7\n" // L4 load lum2
+          "por            %%mm5,                  %%mm3\n" //
+          "psrlw          $8,                     %%mm7\n" // L4
+          "movq           %%mm4,                  %%mm5\n"
+          "punpcklwd      %%mm3,                  %%mm4\n"
+-#ifdef GCC2_HACK
+          "pmullw         _MMX_Ycoeff,            %%mm7\n" // lum4
+-#else
+-         "pmullw         %[_MMX_Ycoeff],            %%mm7\n" // lum4
+-#endif
+          "punpckhwd      %%mm3,                  %%mm5\n"
+ 
+          "movq           %%mm4,                  (%3)\n"  // write row1
+@@ -457,20 +356,11 @@ void Color565DitherYV12MMX1X( int *color
+          "punpcklbw      %%mm5,                  %%mm5\n"
+          "punpcklbw      %%mm6,                  %%mm6\n"
+          "psllw          $3,                     %%mm5\n" // GREEN 3
+-#ifdef GCC2_HACK
+          "pand           _MMX_red565,            %%mm4\n"
+-#else
+-         "pand           %[_MMX_red565],            %%mm4\n"
+-#endif
+          "psraw          $6,                     %%mm3\n" // psr 6
+          "psraw          $6,                     %%mm0\n"
+-#ifdef GCC2_HACK
+          "pand           _MMX_red565,            %%mm6\n" // BLUE
+          "pand           _MMX_grn565,            %%mm5\n"
+-#else
+-         "pand           %[_MMX_red565],            %%mm6\n" // BLUE
+-         "pand           %[_MMX_grn565],            %%mm5\n"
+-#endif
+          "psrlw          $11,                    %%mm6\n" // BLUE  3
+          "por            %%mm5,                  %%mm4\n"
+          "psraw          $6,                     %%mm7\n"
+@@ -481,20 +371,11 @@ void Color565DitherYV12MMX1X( int *color
+          "punpcklbw      %%mm3,                  %%mm3\n"
+          "punpcklbw      %%mm0,                  %%mm0\n"
+          "punpcklbw      %%mm7,                  %%mm7\n"
+-#ifdef GCC2_HACK
+          "pand           _MMX_red565,            %%mm3\n"
+          "pand           _MMX_red565,            %%mm7\n" // BLUE
+-#else
+-         "pand           %[_MMX_red565],            %%mm3\n"
+-         "pand           %[_MMX_red565],            %%mm7\n" // BLUE
+-#endif
+          "psllw          $3,                     %%mm0\n" // GREEN 4
+          "psrlw          $11,                    %%mm7\n"
+-#ifdef GCC2_HACK
+          "pand           _MMX_grn565,            %%mm0\n"
+-#else
+-         "pand           %[_MMX_grn565],            %%mm0\n"
+-#endif
+          "por            %%mm7,                  %%mm3\n"
+          "por            %%mm0,                  %%mm3\n"
+ 
+@@ -526,21 +407,7 @@ void Color565DitherYV12MMX1X( int *color
+        "popl %%ebx\n"
+          :
+          :"m" (cr), "r"(cb),"r"(lum),
+-       "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod)
+-#ifndef GCC2_HACK
+-       ,[_MMX_0080w] "m" (*MMX_0080w),
+-       [_MMX_Ugrn565] "m" (*MMX_Ugrn565),
+-       [_MMX_Ublu5x5] "m" (*MMX_Ublu5x5),
+-       [_MMX_00FFw] "m" (*MMX_00FFw),
+-       [_MMX_Vgrn565] "m" (*MMX_Vgrn565),
+-       [_MMX_Vred5x5] "m" (*MMX_Vred5x5),
+-       [_MMX_Ycoeff] "m" (*MMX_Ycoeff),
+-       [_MMX_red565] "m" (*MMX_red565),
+-       [_MMX_grn565] "m" (*MMX_grn565)
+-#endif
+-               );
++       "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod));
+ }
+ 
+-#undef GCC2_HACK
+-
+ #endif /* GCC i386 inline assembly */
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-no-exec-stack.patch b/media-libs/libsdl/files/libsdl-1.2.9-no-exec-stack.patch
new file mode 100644 (file)
index 0000000..4dd6e9d
--- /dev/null
@@ -0,0 +1,44 @@
+Fixes from the PaX team to eliminate executable stack markings
+
+--- src/hermes/mmx_main.asm
++++ src/hermes/mmx_main.asm
+@@ -70,5 +68,4 @@ endconvert:
+       
+       ret             
+ 
+-
+-
++section .note.GNU-stack noalloc noexec nowrite progbits
+--- src/hermes/mmxp2_32.asm
++++ src/hermes/mmxp2_32.asm
+@@ -381,6 +381,5 @@ _convert_bgr555_cheat:
+ 
+ .L4:          
+       jmp _mmxreturn
+ 
+-
+-
++section .note.GNU-stack noalloc noexec nowrite progbits
+--- src/hermes/x86_main.asm
++++ src/hermes/x86_main.asm
+@@ -123,3 +123,5 @@ _Hermes_X86_CPU:
+ 
+ .L1:  
+       ret
++
++section .note.GNU-stack noalloc noexec nowrite progbits
+--- src/hermes/x86p_16.asm
++++ src/hermes/x86p_16.asm
+@@ -494,3 +494,4 @@ _ConvertX86p16_8RGB332:
+ .L7 pop ebp
+     jmp _x86return
+ 
++section .note.GNU-stack noalloc noexec nowrite progbits
+--- src/hermes/x86p_32.asm
++++ src/hermes/x86p_32.asm
+@@ -1041,3 +1041,5 @@ _ConvertX86p32_8RGB332:
+       
+ .L4:  
+       jmp _x86return
++
++section .note.GNU-stack noalloc noexec nowrite progbits
diff --git a/media-libs/libsdl/files/libsdl-1.2.9-sdl-blit-mmx-check.patch b/media-libs/libsdl/files/libsdl-1.2.9-sdl-blit-mmx-check.patch
new file mode 100644 (file)
index 0000000..9357cd2
--- /dev/null
@@ -0,0 +1,15 @@
+Fix segfaults when playing games like bomberclone
+
+http://bugs.gentoo.org/104533
+
+--- src/video/SDL_blit_N.c
++++ src/video/SDL_blit_N.c
+@@ -2245,7 +2245,7 @@
+                           MASKOK(dstfmt->Bmask, table[which].dstB) &&
+                           dstfmt->BytesPerPixel == table[which].dstbpp &&
+                           (a_need & table[which].alpha) == a_need &&
+-                          ((table[which].blit_features & GetBlitFeatures()) == table[which].blit_features) )
++                          (table[which].blit_features & GetBlitFeatures()))
+                               break;
+               }
+               sdata->aux_data = table[which].aux_data;
diff --git a/media-libs/libsdl/libsdl-1.2.9-r1.ebuild b/media-libs/libsdl/libsdl-1.2.9-r1.ebuild
new file mode 100644 (file)
index 0000000..772796e
--- /dev/null
@@ -0,0 +1,140 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/libsdl-1.2.9-r1.ebuild,v 1.1 2005/09/29 09:47:26 vapier Exp $
+
+inherit flag-o-matic toolchain-funcs eutils
+
+DESCRIPTION="Simple Direct Media Layer"
+HOMEPAGE="http://www.libsdl.org/"
+SRC_URI="http://www.libsdl.org/release/SDL-${PV}.tar.gz"
+
+LICENSE="LGPL-2"
+SLOT="0"
+KEYWORDS="-*" #~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc-macos ~ppc64 ~sparc ~x86"
+# WARNING:
+# if you have the noaudio, novideo, nojoystick, or noflagstrip use flags
+# in USE and something breaks, you pick up the pieces.  Be prepared for
+# bug reports to be marked INVALID.
+IUSE="oss alsa esd arts nas X dga xv xinerama fbcon directfb ggi svga aalib opengl libcaca pic noaudio novideo nojoystick noflagstrip"
+
+RDEPEND=">=media-libs/audiofile-0.1.9
+       alsa? ( media-libs/alsa-lib )
+       esd? ( >=media-sound/esound-0.2.19 )
+       arts? ( kde-base/arts )
+       nas? ( media-libs/nas
+               virtual/x11 )
+       X? ( virtual/x11 )
+       directfb? ( >=dev-libs/DirectFB-0.9.19 )
+       ggi? ( >=media-libs/libggi-2.0_beta3 )
+       svga? ( >=media-libs/svgalib-1.4.2 )
+       aalib? ( media-libs/aalib )
+       libcaca? ( >=media-libs/libcaca-0.9-r1 )
+       opengl? ( virtual/opengl )"
+DEPEND="${RDEPEND}
+       x86? ( dev-lang/nasm )"
+
+S=${WORKDIR}/SDL-${PV}
+
+pkg_setup() {
+       if use noaudio || use novideo || use nojoystick ; then
+               ewarn "Since you've chosen to turn off some of libsdl's functionality,"
+               ewarn "don't bother filing libsdl-related bugs until trying to remerge"
+               ewarn "libsdl without the no* flags in USE.  You need to know what"
+               ewarn "you're doing to selectively turn off parts of libsdl."
+               epause 30
+       fi
+       if use noflagstrip ; then
+               ewarn "Since you've chosen to use possibly unsafe CFLAGS,"
+               ewarn "don't bother filing libsdl-related bugs until trying to remerge"
+               ewarn "libsdl without the noflagstrip use flag in USE."
+               epause 10
+       fi
+}
+
+src_unpack() {
+       unpack ${A}
+       cd "${S}"
+
+       epatch "${FILESDIR}"/1.2.8-nobuggy-X.patch #30089
+       epatch "${FILESDIR}"/libsdl-1.2.8-libcaca.patch #40224
+       epatch "${FILESDIR}"/libsdl-1.2.8-sdl-config.patch
+       epatch "${FILESDIR}"/libsdl-1.2.8-no-cxx.patch
+       epatch "${FILESDIR}"/libsdl-1.2.9-dlvsym-check.patch #105160
+       epatch "${FILESDIR}"/1.2.8-gcc4.patch
+       epatch "${FILESDIR}"/${P}-gcc-mmx.patch #104437
+       epatch "${FILESDIR}"/libsdl-1.2.9-no-exec-stack.patch
+       epatch "${FILESDIR}"/libsdl-1.2.9-PIC-hermes-cpuid.patch
+       epatch "${FILESDIR}"/libsdl-1.2.9-PIC-SDL_stretch.patch
+       epatch "${FILESDIR}"/libsdl-1.2.9-PIC-hermes-call-dont-jump.patch
+       epatch "${FILESDIR}"/libsdl-1.2.9-PIC-load-mmx-masks-from-stack.patch
+       epatch "${FILESDIR}"/${P}-sdl-blit-mmx-check.patch #104533
+
+       ./autogen.sh || die "autogen failed"
+       epunt_cxx
+}
+
+src_compile() {
+       local myconf=
+       # silly bundled asm triggers TEXTREL ... maybe someday
+       # i'll fix this properly, but for now hide with USE=pic
+       if [[ $(tc-arch) != "x86" ]] || use pic ; then
+               myconf="${myconf} --disable-nasm"
+       else
+               myconf="${myconf} $(use_enable x86 nasm)"
+       fi
+       use noflagstrip || strip-flags
+       use noaudio && myconf="${myconf} --disable-audio"
+       use novideo \
+               && myconf="${myconf} --disable-video" \
+               || myconf="${myconf} --enable-video-dummy"
+       use nojoystick && myconf="${myconf} --disable-joystick"
+
+       local directfbconf="--disable-video-directfb"
+       if use directfb ; then
+               # since DirectFB can link against SDL and trigger a
+               # dependency loop, only link against DirectFB if it
+               # isn't broken #61592
+               echo 'int main(){}' > directfb-test.c
+               $(tc-getCC) directfb-test.c -ldirectfb 2>/dev/null \
+                       && directfbconf="--enable-video-directfb" \
+                       || ewarn "Disabling DirectFB since libdirectfb.so is broken"
+       fi
+
+       myconf="${myconf} ${directfbconf}"
+
+       econf \
+               --disable-dependency-tracking \
+               --disable-rpath \
+               --enable-events \
+               --enable-cdrom \
+               --enable-threads \
+               --enable-timers \
+               --enable-endian \
+               --enable-file \
+               --enable-cpuinfo \
+               $(use_enable oss) \
+               $(use_enable alsa) \
+               $(use_enable esd) \
+               $(use_enable arts) \
+               $(use_enable nas) \
+               $(use_enable X video-x11) \
+               $(use_enable dga) \
+               $(use_enable xv video-x11-xv) \
+               $(use_enable xinerama video-x11-xinerama) \
+               $(use_enable dga video-dga) \
+               $(use_enable fbcon video-fbcon) \
+               $(use_enable ggi video-ggi) \
+               $(use_enable svga video-svga) \
+               $(use_enable aalib video-aalib) \
+               $(use_enable libcaca video-caca) \
+               $(use_enable opengl video-opengl) \
+               $(use_with X x) \
+               ${myconf} || die
+       emake || die "emake failed"
+}
+
+src_install() {
+       make DESTDIR="${D}" install || die "make install failed"
+       dodoc BUGS CREDITS README README-SDL.txt README.CVS TODO WhatsNew
+       dohtml -r ./
+}