Hi list,
currently mesa seems to have some so called TEXTREL issue
( http://www.gentoo.org/proj/en/hardened/pic-fix-guide.xml ). Gentoo
proviedes a patch to fix that. It's not written by me and maybe it
already was sent to this list. Anyway I sent it :-)
Regards,
Christoph Brill
--- src/mesa/x86/mmx_blend.S.orig 2006-07-02 12:59:54.000000000 +0200
+++ src/mesa/x86/mmx_blend.S 2006-07-02 15:52:35.000000000 +0200
@@ -1,4 +1,4 @@
-
+ ;
/*
* Written by José Fonseca <[EMAIL PROTECTED]>
*/
@@ -240,7 +240,9 @@
ONE(MOVD ( MSS, REGIND(rgba) )) /* | | | | sa1 | sb1 | sg1 | sr1 */ ;\
TWO(MOVQ ( MSS, REGIND(rgba) )) /* sa2 | sb2 | sg2 | sr2 | sa1 | sb1 | sg1 | sr1 */
-
+/* Kevin F. Quinn <[EMAIL PROTECTED]> 2 July 2006
+ * Replace data segment constants with text-segment
+ * constants (via pushl/movq)
SEG_DATA
ALIGNDATA8
@@ -249,6 +251,11 @@
const_80:
D_LONG 0x80808080, 0x80808080
+*/
+#define const_0080_l 0x00800080
+#define const_0080_h 0x00800080
+#define const_80_l 0x80808080
+#define const_80_h 0x80808080
SEG_TEXT
@@ -302,8 +309,16 @@
#define TAG(x) CONCAT(x,_min)
#define LLTAG(x) LLBL2(x,_min)
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+#define INIT \
+ MOVQ ( CONTENT(const_80), MM7 )
+ */
#define INIT \
- MOVQ ( CONTENT(const_80), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
+ PUSH_L ( CONST(const_80_h) ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ ;\
+ PUSH_L ( CONST(const_80_l) ) ;\
+ MOVQ ( REGIND(ESP), MM7 ) ;\
+ ADD_L ( CONST(8), ESP)
#define MAIN( rgba, dest ) \
GMB_LOAD( rgba, dest, MM1, MM2 ) ;\
@@ -326,8 +341,16 @@
#define TAG(x) CONCAT(x,_max)
#define LLTAG(x) LLBL2(x,_max)
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
#define INIT \
- MOVQ ( CONTENT(const_80), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
+ MOVQ ( CONTENT(const_80), MM7 )
+ */
+#define INIT \
+ PUSH_L ( CONST(const_80_l) ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ ;\
+ PUSH_L ( CONST(const_80_h) ) ;\
+ MOVQ ( REGIND(ESP), MM7 ) ;\
+ ADD_L ( CONST(8), ESP)
#define MAIN( rgba, dest ) \
GMB_LOAD( rgba, dest, MM1, MM2 ) ;\
@@ -350,9 +373,17 @@
#define TAG(x) CONCAT(x,_modulate)
#define LLTAG(x) LLBL2(x,_modulate)
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+#define INIT \
+ MOVQ ( CONTENT(const_0080), MM7 )
+ */
#define INIT \
PXOR ( MM0, MM0 ) /* 0x0000 | 0x0000 | 0x0000 | 0x0000 */ ;\
- MOVQ ( CONTENT(const_0080), MM7 ) /* 0x0080 | 0x0080 | 0x0080 | 0x0080 */
+ PUSH_L ( CONST(const_0080_l) ) /* 0x0080 | 0x0080 | 0x0080 | 0x0080 */ ;\
+ PUSH_L ( CONST(const_0080_h) ) ;\
+ MOVQ ( REGIND(ESP), MM7 ) ;\
+ ADD_L ( CONST(8), ESP)
#define MAIN( rgba, dest ) \
GMB_LOAD( rgba, dest, MM1, MM2 ) ;\
--- src/mesa/x86/read_rgba_span_x86.S.orig 2006-07-02 16:12:27.000000000 +0200
+++ src/mesa/x86/read_rgba_span_x86.S 2006-07-02 16:50:47.000000000 +0200
@@ -32,6 +32,8 @@
.file "read_rgba_span_x86.S"
#if !defined(__DJGPP__) && !defined(__MINGW32__) /* this one cries for assyntax.h */
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
.section .rodata
.align 16
.type mask, @object
@@ -45,6 +47,19 @@
.long 0x00ff0000
.long 0x00ff0000
.long 0x00ff0000
+ */
+#define LOAD_MASK(mvins,m1,m2) \
+ pushl $0xff00ff00 ;\
+ pushl $0xff00ff00 ;\
+ pushl $0xff00ff00 ;\
+ pushl $0xff00ff00 ;\
+ mvins (%esp), m1 ;\
+ pushl $0x00ff0000 ;\
+ pushl $0x00ff0000 ;\
+ pushl $0x00ff0000 ;\
+ pushl $0x00ff0000 ;\
+ mvins (%esp), m2 ;\
+ addl $32, %esp
/* I implemented these as macros because the appear in quite a few places,
@@ -84,8 +99,12 @@
#ifdef USE_INNER_EMMS
emms
#endif
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
movq mask, %mm1
movq mask+16, %mm2
+ */
+ LOAD_MASK(movq,%mm1,%mm2)
movl 8(%esp), %ebx /* source pointer */
movl 16(%esp), %edx /* number of pixels to copy */
@@ -182,8 +201,12 @@
#ifdef USE_INNER_EMMS
emms
#endif
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
movq mask, %mm1
movq mask+16, %mm2
+ */
+ LOAD_MASK(movq,%mm1,%mm2)
movl 16(%esp), %ebx /* source pointer */
movl 24(%esp), %edx /* number of pixels to copy */
@@ -341,8 +364,12 @@
pushl %esi
pushl %ebx
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
movdqa mask, %xmm1
movdqa mask+16, %xmm2
+ */
+ LOAD_MASK(movdqa,%xmm1,%xmm2)
movl 12(%esp), %ebx /* source pointer */
movl 20(%esp), %edx /* number of pixels to copy */
@@ -464,6 +491,10 @@
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+ */
+#if 0
.section .rodata
.align 16
@@ -510,6 +541,26 @@
alpha: .long 0x00000000
.long 0x00ff0000
+#endif
+
+#define MASK_565_L 0x07e0f800
+#define MASK_565_H 0x0000001f
+#define SCALE_ADJUST 5
+#if SCALE_ADJUST == 5
+#define PRESCALE_L 0x00100001
+#define PRESCALE_H 0x00000200
+#define SCALE_L 0x40C620E8
+#define SCALE_H 0x0000839d
+#elif SCALE_ADJUST == 0
+#define PRESCALE_L 0x00200001
+#define PRESCALE_H 0x00000800
+#define SCALE_L 0x01040108
+#define SCALE_H 0x00000108
+#else
+#error SCALE_ADJUST must either be 5 or 0.
+#endif
+#define ALPHA_L 0x00000000
+#define ALPHA_H 0x00ff0000
/**
* MMX optimized version of the RGB565 to RGBA copy routine.
@@ -530,9 +581,25 @@
movl 8(%esp), %edx /* destination pointer */
movl 12(%esp), %ecx /* number of pixels to copy */
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
movq mask_565, %mm5
movq prescale, %mm6
movq scale, %mm7
+ */
+ pushl MASK_565_H
+ pushl MASK_565_L
+ movq (%esp), %mm5
+ pushl PRESCALE_H
+ pushl PRESCALE_L
+ movq (%esp), %mm6
+ pushl SCALE_H
+ pushl SCALE_L
+ movq (%esp), %mm7
+ pushl ALPHA_H
+ pushl ALPHA_L
+ movq (%esp), %mm3
+ addl $32,%esp
sarl $2, %ecx
jle .L01 /* Bail early if the count is negative. */
@@ -581,8 +648,13 @@
/* Always set the alpha value to 0xff.
*/
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
por alpha, %mm0
por alpha, %mm2
+ */
+ por %mm3, %mm0
+ por %mm3, %mm2
/* Pack the 16-bit values to 8-bit values and store the converted
@@ -609,8 +681,13 @@
pmulhuw %mm7, %mm0
pmulhuw %mm7, %mm2
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
por alpha, %mm0
por alpha, %mm2
+ */
+ por %mm3, %mm0
+ por %mm3, %mm2
packuswb %mm2, %mm0
@@ -647,8 +724,13 @@
pmulhuw %mm7, %mm0
pmulhuw %mm7, %mm2
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
por alpha, %mm0
por alpha, %mm2
+ */
+ por %mm3, %mm0
+ por %mm3, %mm2
packuswb %mm2, %mm0
@@ -675,7 +757,11 @@
#endif
pmulhuw %mm7, %mm0
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
por alpha, %mm0
+ */
+ por %mm3, %mm0
packuswb %mm0, %mm0
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev