BlitRGBtoRGBPixelAlphaMMX() is putting the wrong value into a register. SDL-1.2
authorRyan C. Gordon <icculus@icculus.org>
Wed, 04 Apr 2007 09:32:29 +0000
branchSDL-1.2
changeset 3931d65b4a73c991
parent 3930 79a4c9017550
child 3932 cd5b5c52a37e
BlitRGBtoRGBPixelAlphaMMX() is putting the wrong value into a register.
Thanks to Alex Volkov for following up on this.

Fixes Bugzilla #390.
src/video/SDL_blit_A.c
     1.1 --- a/src/video/SDL_blit_A.c	Wed Apr 04 09:15:39 2007 +0000
     1.2 +++ b/src/video/SDL_blit_A.c	Wed Apr 04 09:32:29 2007 +0000
     1.3 @@ -369,7 +369,9 @@
     1.4  	packsswb_r2r(mm6, mm3); /* 0000FFFF -> mm3 */
     1.5  	pxor_r2r(mm0, mm3); /* 0000F000 -> mm3 (~channel mask) */
     1.6  	/* get alpha channel shift */
     1.7 -	movd_m2r(sf->Ashift, mm5); /* Ashift -> mm5 */
     1.8 +	__asm__ __volatile__ (
     1.9 +		"movd %0, %%mm5"
    1.10 +		: : "rm" ((Uint32) sf->Ashift) ); /* Ashift -> mm5 */
    1.11  
    1.12  	while(height--) {
    1.13  	    DUFFS_LOOP4({
    1.14 @@ -1566,7 +1568,6 @@
    1.15  	int dstskip = info->d_skip >> 2;
    1.16  	SDL_PixelFormat* sf = info->src;
    1.17  	Uint32 amask = sf->Amask;
    1.18 -	Uint32 ashift = sf->Ashift;
    1.19  
    1.20  	__asm__ (
    1.21  	/* make mm6 all zeros. */
    1.22 @@ -1588,7 +1589,7 @@
    1.23  	/* get alpha channel shift */
    1.24  	"movd      %1, %%mm5\n\t" /* Ashift -> mm5 */
    1.25  
    1.26 -	  : /* nothing */ : "m" (amask), "m" (ashift) );
    1.27 +	  : /* nothing */ : "rm" (amask), "rm" ((Uint32) sf->Ashift) );
    1.28  
    1.29  	while(height--) {
    1.30