I noticed that there are notes about removing data segment variables and
moving them into text-segment (in the form of push/pop). I don't think that
is faster than directly loading the values. Has anyone checked this out?

Patrick Baggett

On Nov 8, 2007 5:12 PM, Benno Schulenberg <[EMAIL PROTECTED]> wrote:

> Signed-off-by: Benno Schulenberg <[EMAIL PROTECTED]>
> ---
>  src/mesa/x86/read_rgba_span_x86.S |  117
> ++----------------------------------
>  1 files changed, 7 insertions(+), 110 deletions(-)
>
> diff --git a/src/mesa/x86/read_rgba_span_x86.S
> b/src/mesa/x86/read_rgba_span_x86.S
> index 8509df6..2e5c3be 100644
> --- a/src/mesa/x86/read_rgba_span_x86.S
> +++ b/src/mesa/x86/read_rgba_span_x86.S
> @@ -33,20 +33,7 @@
>        .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
> -       .size   mask, 32
> -mask:
> -       .long   0xff00ff00
> -       .long   0xff00ff00
> -       .long   0xff00ff00
> -       .long   0xff00ff00
> -       .long   0x00ff0000
> -       .long   0x00ff0000
> -       .long   0x00ff0000
> -       .long   0x00ff0000
> + * Replaced data segment constants with text-segment instructions.
>  */
>  #define        LOAD_MASK(mvins,m1,m2) \
>        pushl   $0xff00ff00 ;\
> @@ -61,8 +48,7 @@ mask:
>        mvins   (%esp), m2      ;\
>        addl    $32, %esp
>
> -
> -/* I implemented these as macros because the appear in quite a few
> places,
> +/* I implemented these as macros because they appear in several places,
>  * and I've tweaked them a number of times.  I got tired of changing every
>  * place they appear. :)
>  */
> @@ -99,11 +85,6 @@ _generic_read_RGBA_span_BGRA8888_REV_MMX:
>  #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 */
> @@ -201,11 +182,7 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE:
>  #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 */
> @@ -364,11 +341,6 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE2:
>        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(movdqu,%xmm1,%xmm2)
>
>        movl    12(%esp), %ebx  /* source pointer */
> @@ -491,60 +463,12 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE2:
>
>
>
> -/* Kevin F. Quinn 2nd July 2006
> - * Replace data segment constants with text-segment instructions
> - */
> -#if 0
> -       .section        .rodata
> -
> -       .align  16
> -mask_565:
> -       .word   0xf800
> -       .word   0x07e0
> -       .word   0x001f
> -       .word   0x0000
> -
> -/* Setting SCALE_ADJUST to 5 gives a perfect match with the classic C
> - * implementation in Mesa.  Setting SCALE_ADJUST to 0 is slightly faster
> but
> - * at a small cost to accuracy.
> - */
> -
> -#define SCALE_ADJUST   5
> -#if SCALE_ADJUST == 5
> -prescale:
> -       .word   0x0001
> -       .word   0x0010
> -       .word   0x0200
> -       .word   0x0000
> -
> -scale:
> -       .word   0x20e8          /* (0x00ff0000 / 0x000007c0) + 1 */
> -       .word   0x40c5          /* (0x00ff0000 / 0x000003f0) + 1 */
> -       .word   0x839d          /* (0x00ff0000 / 0x000001f0) + 1 */
> -       .word   0x0000
> -#elif SCALE_ADJUST == 0
> -prescale:
> -       .word   0x0001
> -       .word   0x0020
> -       .word   0x0800
> -       .word   0x0000
> -
> -scale:
> -       .word   0x0108          /* (0x00ff0000 / 0x0000f800) + 1 */
> -       .word   0x0104          /* (0x00ff0000 / 0x0000fc00) + 1 */
> -       .word   0x0108          /* (0x00ff0000 / 0x0000f800) + 1 */
> -       .word   0x0000
> -#else
> -#error SCALE_ADJUST must either be 5 or 0.
> -#endif
> -
> -
> -alpha: .long   0x00000000
> -       .long   0x00ff0000
> -#endif
> -
>  #define MASK_565_L     0x07e0f800
>  #define MASK_565_H     0x0000001f
> +/* Setting SCALE_ADJUST to 5 gives a perfect match with the
> + * classic C implementation in Mesa.  Setting SCALE_ADJUST
> + * to 0 is slightly faster but at a small cost to accuracy.
> + */
>  #define SCALE_ADJUST   5
>  #if SCALE_ADJUST == 5
>  #define PRESCALE_L 0x00100001
> @@ -581,12 +505,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>        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
> @@ -648,11 +566,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>        /* 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
>
> @@ -665,8 +578,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>        movq    %mm0, (%edx)
>        addl    $8, %edx
>
> -
> -
>        pshufw  $0xaa, %mm4, %mm0
>        pshufw  $0xff, %mm4, %mm2
>
> @@ -681,11 +592,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>        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
>
> @@ -724,11 +630,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>        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
>
> @@ -757,10 +658,6 @@ _generic_read_RGBA_span_RGB565_MMX:
>  #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
> --
> 1.5.2.5
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems?  Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >> http://get.splunk.com/
> _______________________________________________
> Mesa3d-dev mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to