MpegPlugin build problem with GCC 3.3

Joshua 'Schwa' Gargus schwa at cc.gatech.edu
Sun Jul 27 06:47:12 UTC 2003


Hi,

There is a problems with the asm syntax in
platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/output.c
that is fixed with the attached patch.  I think it should
work with older compilers as well, but I don't have one
handy to check with.  Could someone give it a try?

Joshua
-------------- next part --------------
264c264
< asm("
---
> asm(
267,281c267,281
< 	movd (%0), %%mm0;          /* Load y   0x00000000000000yy */
< 	movd (%1), %%mm1;          /* Load u    0x00000000000000cr */
< 	movq %%mm0, %%mm3;         /* Copy y to temp */
< 	psllq $16, %%mm1;          /* Shift u   0x0000000000cr0000 */
< 	movd (%2), %%mm2;          /* Load v    0x00000000000000cb */
< 	psllq $16, %%mm3;          /* Shift y */
< 	movq %%mm1, %%mm4;         /* Copy u to temp */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x0000000000yy00yy */
< 	psllq $16, %%mm4;          /* Shift u */
< 	movq %%mm2, %%mm5;         /* Copy v to temp */
< 	psllq $16, %%mm3;          /* Shift y  */
< 	por %%mm4, %%mm1;          /* Overlay new u byte 0x000000cr00cr0000 */
< 	psllq $16, %%mm5;          /* Shift v  */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x000000yy00yy00yy */
< 	por %%mm5, %%mm2;          /* Overlay new v byte 0x0000000000cb00cb */
---
> 	"movd (%0), %%mm0;"          /* Load y   0x00000000000000yy */
> 	"movd (%1), %%mm1;"          /* Load u    0x00000000000000cr */
> 	"movq %%mm0, %%mm3;"         /* Copy y to temp */
> 	"psllq $16, %%mm1;"          /* Shift u   0x0000000000cr0000 */
> 	"movd (%2), %%mm2;"          /* Load v    0x00000000000000cb */
> 	"psllq $16, %%mm3;"          /* Shift y */
> 	"movq %%mm1, %%mm4;"         /* Copy u to temp */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x0000000000yy00yy */
> 	"psllq $16, %%mm4;"          /* Shift u */
> 	"movq %%mm2, %%mm5;"         /* Copy v to temp */
> 	"psllq $16, %%mm3;"          /* Shift y  */
> 	"por %%mm4, %%mm1;"          /* Overlay new u byte 0x000000cr00cr0000 */
> 	"psllq $16, %%mm5;"          /* Shift v  */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x000000yy00yy00yy */
> 	"por %%mm5, %%mm2;"          /* Overlay new v byte 0x0000000000cb00cb */
284,288c284,288
<  	psubw _mpeg3_MMX_U_80, %%mm1;    /* Subtract 128 from u 0x000000uu00uu0000 */
<  	pmullw _mpeg3_MMX_U_COEF, %%mm1; /* Multiply u coeffs 0x0000uuuuuuuu0000 */
<  	psllw $6, %%mm0;                /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
<  	psubw _mpeg3_MMX_V_80, %%mm2;    /* Subtract 128 from v 0x0000000000cb00cb */
<  	pmullw _mpeg3_MMX_V_COEF, %%mm2; /* Multiply v coeffs 0x0000crcrcrcrcrcr */
---
>  	"psubw _mpeg3_MMX_U_80, %%mm1;"    /* Subtract 128 from u 0x000000uu00uu0000 */
>  	"pmullw _mpeg3_MMX_U_COEF, %%mm1;" /* Multiply u coeffs 0x0000uuuuuuuu0000 */
>  	"psllw $6, %%mm0;"                /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
>  	"psubw _mpeg3_MMX_V_80, %%mm2;"    /* Subtract 128 from v 0x0000000000cb00cb */
>  	"pmullw _mpeg3_MMX_V_COEF, %%mm2;" /* Multiply v coeffs 0x0000crcrcrcrcrcr */
291,296c291,295
< 	paddsw %%mm1, %%mm0;        /* Add u to result */
< 	paddsw %%mm2, %%mm0;        /* Add v to result 0x0000rrrrggggbbbb */
< 	psraw $6, %%mm0;           /* Demote precision */
< 	packuswb %%mm0, %%mm0;     /* Pack into ARGB 0x0000000000rrggbb */
< 	movd %%mm0, (%3);          /* Store output */
< 	"
---
> 	"paddsw %%mm1, %%mm0;"        /* Add u to result */
> 	"paddsw %%mm2, %%mm0;"        /* Add v to result 0x0000rrrrggggbbbb */
> 	"psraw $6, %%mm0;"           /* Demote precision */
> 	"packuswb %%mm0, %%mm0;"     /* Pack into ARGB 0x0000000000rrggbb */
> 	"movd %%mm0, (%3);"          /* Store output */
306c305
< asm("
---
> asm(
310,324c309,323
< 	psubsw _mpeg3_MMX_601_Y_DIFF, %%mm0;      /* Subtract 16 from y */
< 	movd (%1), %%mm1;          /* Load u    0x00000000000000cr */
< 	movq %%mm0, %%mm3;         /* Copy y to temp */
< 	psllq $16, %%mm1;          /* Shift u   0x0000000000cr0000 */
< 	movd (%2), %%mm2;          /* Load v    0x00000000000000cb */
< 	psllq $16, %%mm3;          /* Shift y */
< 	movq %%mm1, %%mm4;         /* Copy u to temp */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x0000000000yy00yy */
< 	psllq $16, %%mm4;          /* Shift u */
< 	movq %%mm2, %%mm5;         /* Copy v to temp */
< 	psllq $16, %%mm3;          /* Shift y  */
< 	por %%mm4, %%mm1;          /* Overlay new u byte 0x000000cr00cr0000 */
< 	psllq $16, %%mm5;          /* Shift v  */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x000000yy00yy00yy */
< 	por %%mm5, %%mm2;          /* Overlay new v byte 0x0000000000cb00cb */
---
> 	"psubsw _mpeg3_MMX_601_Y_DIFF, %%mm0;"      /* Subtract 16 from y */
> 	"movd (%1), %%mm1;"          /* Load u    0x00000000000000cr */
> 	"movq %%mm0, %%mm3;"         /* Copy y to temp */
> 	"psllq $16, %%mm1;"          /* Shift u   0x0000000000cr0000 */
> 	"movd (%2), %%mm2;"          /* Load v    0x00000000000000cb */
> 	"psllq $16, %%mm3;"          /* Shift y */
> 	"movq %%mm1, %%mm4;"         /* Copy u to temp */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x0000000000yy00yy */
> 	"psllq $16, %%mm4;"          /* Shift u */
> 	"movq %%mm2, %%mm5;"         /* Copy v to temp */
> 	"psllq $16, %%mm3;"          /* Shift y  */
> 	"por %%mm4, %%mm1;"          /* Overlay new u byte 0x000000cr00cr0000 */
> 	"psllq $16, %%mm5;"          /* Shift v  */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x000000yy00yy00yy */
> 	"por %%mm5, %%mm2;"          /* Overlay new v byte 0x0000000000cb00cb */
327,331c326,330
< 	pmullw _mpeg3_MMX_601_Y_COEF, %%mm0; /* Scale and shift y coeffs */
< 	psubw _mpeg3_MMX_U_80, %%mm1;     /* Subtract 128 from u 0x000000uu00uu0000 */
<  	pmullw _mpeg3_MMX_U_COEF, %%mm1;  /* Multiply u coeffs 0x0000uuuuuuuu0000 */
< 	psubw _mpeg3_MMX_V_80, %%mm2;     /* Subtract 128 from v 0x0000000000cb00cb */
<  	pmullw _mpeg3_MMX_V_COEF, %%mm2;  /* Multiply v coeffs 0x0000crcrcrcrcrcr */
---
> 	"pmullw _mpeg3_MMX_601_Y_COEF, %%mm0;" /* Scale and shift y coeffs */
> 	"psubw _mpeg3_MMX_U_80, %%mm1;"     /* Subtract 128 from u 0x000000uu00uu0000 */
>  	"pmullw _mpeg3_MMX_U_COEF, %%mm1;"  /* Multiply u coeffs 0x0000uuuuuuuu0000 */
> 	"psubw _mpeg3_MMX_V_80, %%mm2;"     /* Subtract 128 from v 0x0000000000cb00cb */
>  	"pmullw _mpeg3_MMX_V_COEF, %%mm2;"  /* Multiply v coeffs 0x0000crcrcrcrcrcr */
334,339c333,337
< 	paddsw %%mm1, %%mm0;        /* Add u to result */
< 	paddsw %%mm2, %%mm0;        /* Add v to result 0x0000rrrrggggbbbb */
< 	psraw $6, %%mm0;           /* Demote precision */
< 	packuswb %%mm0, %%mm0;     /* Pack into ARGB 0x0000000000rrggbb */
< 	movd %%mm0, (%3);          /* Store output */
< 	"
---
> 	"paddsw %%mm1, %%mm0;"        /* Add u to result */
> 	"paddsw %%mm2, %%mm0;"        /* Add v to result 0x0000rrrrggggbbbb */
> 	"psraw $6, %%mm0;"           /* Demote precision */
> 	"packuswb %%mm0, %%mm0;"     /* Pack into ARGB 0x0000000000rrggbb */
> 	"movd %%mm0, (%3);"          /* Store output */
354c352
< asm("
---
> asm(
357,371c355,369
< 	movd (%0), %%mm0;          /* Load y   0x00000000000000yy */
< 	movd (%1), %%mm1;          /* Load v    0x00000000000000vv */
< 	movq %%mm0, %%mm3;         /* Copy y to temp */
< 	psllq $16, %%mm1;          /* Shift v   0x0000000000vv0000 */
< 	movd (%2), %%mm2;          /* Load u    0x00000000000000uu */
< 	psllq $16, %%mm3;          /* Shift y */
< 	movq %%mm1, %%mm4;         /* Copy v to temp */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x0000000000yy00yy */
< 	psllq $16, %%mm4;          /* Shift v */
< 	movq %%mm2, %%mm5;         /* Copy u to temp */
< 	psllq $16, %%mm3;          /* Shift y  */
< 	por %%mm4, %%mm1;          /* Overlay new v byte 0x000000vv00vv0000 */
< 	psllq $16, %%mm5;          /* Shift u  */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x000000yy00yy00yy */
< 	por %%mm5, %%mm2;          /* Overlay new u byte 0x0000000000uu00uu */
---
> 	"movd (%0), %%mm0;"          /* Load y   0x00000000000000yy */
> 	"movd (%1), %%mm1;"          /* Load v    0x00000000000000vv */
> 	"movq %%mm0, %%mm3;"         /* Copy y to temp */
> 	"psllq $16, %%mm1;"          /* Shift v   0x0000000000vv0000 */
> 	"movd (%2), %%mm2;"          /* Load u    0x00000000000000uu */
> 	"psllq $16, %%mm3;"          /* Shift y */
> 	"movq %%mm1, %%mm4;"         /* Copy v to temp */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x0000000000yy00yy */
> 	"psllq $16, %%mm4;"          /* Shift v */
> 	"movq %%mm2, %%mm5;"         /* Copy u to temp */
> 	"psllq $16, %%mm3;"          /* Shift y  */
> 	"por %%mm4, %%mm1;"          /* Overlay new v byte 0x000000vv00vv0000 */
> 	"psllq $16, %%mm5;"          /* Shift u  */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x000000yy00yy00yy */
> 	"por %%mm5, %%mm2;"          /* Overlay new u byte 0x0000000000uu00uu */
374,378c372,376
<  	psubw _mpeg3_MMX_V_80_RGB, %%mm1;    /* Subtract 128 from v 0x000000vv00vv0000 */
<  	pmullw _mpeg3_MMX_V_COEF_RGB, %%mm1; /* Multiply v coeffs 0x0000vvvvvvvv0000 */
<  	psllw $6, %%mm0;                /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
<  	psubw _mpeg3_MMX_U_80_RGB, %%mm2;    /* Subtract 128 from u 0x0000000000uu00uu */
<  	pmullw _mpeg3_MMX_U_COEF_RGB, %%mm2; /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
---
>  	"psubw _mpeg3_MMX_V_80_RGB, %%mm1;"    /* Subtract 128 from v 0x000000vv00vv0000 */
>  	"pmullw _mpeg3_MMX_V_COEF_RGB, %%mm1;" /* Multiply v coeffs 0x0000vvvvvvvv0000 */
>  	"psllw $6, %%mm0;"                /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
>  	"psubw _mpeg3_MMX_U_80_RGB, %%mm2;"    /* Subtract 128 from u 0x0000000000uu00uu */
>  	"pmullw _mpeg3_MMX_U_COEF_RGB, %%mm2;" /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
381,386c379,383
< 	paddsw %%mm1, %%mm0;        /* Add v to result */
< 	paddsw %%mm2, %%mm0;        /* Add u to result 0x0000bbbbggggrrrr */
< 	psraw $6, %%mm0;           /* Demote precision */
< 	packuswb %%mm0, %%mm0;     /* Pack into RGBA 0x0000000000bbggrr */
< 	movd %%mm0, (%3);          /* Store output */
< 	"
---
> 	"paddsw %%mm1, %%mm0;"        /* Add v to result */
> 	"paddsw %%mm2, %%mm0;"        /* Add u to result 0x0000bbbbggggrrrr */
> 	"psraw $6, %%mm0;"           /* Demote precision */
> 	"packuswb %%mm0, %%mm0;"     /* Pack into RGBA 0x0000000000bbggrr */
> 	"movd %%mm0, (%3);"          /* Store output */
396c393
< asm("
---
> asm(
399,414c396,411
< 	movd (%0), %%mm0;          /* Load y   0x00000000000000yy */
< 	psubsw _mpeg3_MMX_601_Y_DIFF, %%mm0;      /* Subtract 16 from y */
< 	movd (%1), %%mm1;          /* Load v    0x00000000000000vv */
< 	movq %%mm0, %%mm3;         /* Copy y to temp */
< 	psllq $16, %%mm1;          /* Shift v   0x0000000000vv0000 */
< 	movd (%2), %%mm2;          /* Load u    0x00000000000000uu */
< 	psllq $16, %%mm3;          /* Shift y */
< 	movq %%mm1, %%mm4;         /* Copy v to temp */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x0000000000yy00yy */
< 	psllq $16, %%mm4;          /* Shift v */
< 	movq %%mm2, %%mm5;         /* Copy u to temp */
< 	psllq $16, %%mm3;          /* Shift y  */
< 	por %%mm4, %%mm1;          /* Overlay new v byte 0x000000vv00vv0000 */
< 	psllq $16, %%mm5;          /* Shift u  */
< 	por %%mm3, %%mm0;          /* Overlay new y byte 0x000000yy00yy00yy */
< 	por %%mm5, %%mm2;          /* Overlay new u byte 0x0000000000uu00uu */
---
> 	"movd (%0), %%mm0;"          /* Load y   0x00000000000000yy */
> 	"psubsw _mpeg3_MMX_601_Y_DIFF, %%mm0;"      /* Subtract 16 from y */
> 	"movd (%1), %%mm1;"          /* Load v    0x00000000000000vv */
> 	"movq %%mm0, %%mm3;"         /* Copy y to temp */
> 	"psllq $16, %%mm1;"          /* Shift v   0x0000000000vv0000 */
> 	"movd (%2), %%mm2;"          /* Load u    0x00000000000000uu */
> 	"psllq $16, %%mm3;"          /* Shift y */
> 	"movq %%mm1, %%mm4;"         /* Copy v to temp */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x0000000000yy00yy */
> 	"psllq $16, %%mm4;"          /* Shift v */
> 	"movq %%mm2, %%mm5;"         /* Copy u to temp */
> 	"psllq $16, %%mm3;"          /* Shift y  */
> 	"por %%mm4, %%mm1;"          /* Overlay new v byte 0x000000vv00vv0000 */
> 	"psllq $16, %%mm5;"          /* Shift u  */
> 	"por %%mm3, %%mm0;"          /* Overlay new y byte 0x000000yy00yy00yy */
> 	"por %%mm5, %%mm2;"          /* Overlay new u byte 0x0000000000uu00uu */
417,421c414,418
< 	pmullw _mpeg3_MMX_601_Y_COEF, %%mm0;     /* Scale y coeffs */
<  	psubw _mpeg3_MMX_V_80_RGB, %%mm1;    /* Subtract 128 from v 0x000000vv00vv0000 */
<  	pmullw _mpeg3_MMX_V_COEF_RGB, %%mm1; /* Multiply v coeffs 0x0000vvvvvvvv0000 */
<  	psubw _mpeg3_MMX_U_80_RGB, %%mm2;    /* Subtract 128 from u 0x0000000000uu00uu */
<  	pmullw _mpeg3_MMX_U_COEF_RGB, %%mm2; /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
---
> 	"pmullw _mpeg3_MMX_601_Y_COEF, %%mm0;"     /* Scale y coeffs */
>  	"psubw _mpeg3_MMX_V_80_RGB, %%mm1;"    /* Subtract 128 from v 0x000000vv00vv0000 */
>  	"pmullw _mpeg3_MMX_V_COEF_RGB, %%mm1;" /* Multiply v coeffs 0x0000vvvvvvvv0000 */
>  	"psubw _mpeg3_MMX_U_80_RGB, %%mm2;"    /* Subtract 128 from u 0x0000000000uu00uu */
>  	"pmullw _mpeg3_MMX_U_COEF_RGB, %%mm2;" /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
424,429c421,425
< 	paddsw %%mm1, %%mm0;        /* Add v to result */
< 	paddsw %%mm2, %%mm0;        /* Add u to result 0x0000bbbbggggrrrr */
< 	psraw $6, %%mm0;           /* Demote precision */
< 	packuswb %%mm0, %%mm0;     /* Pack into RGBA 0x0000000000bbggrr */
< 	movd %%mm0, (%3);          /* Store output */
< 	"
---
> 	"paddsw %%mm1, %%mm0;"        /* Add v to result */
> 	"paddsw %%mm2, %%mm0;"        /* Add u to result 0x0000bbbbggggrrrr */
> 	"psraw $6, %%mm0;"           /* Demote precision */
> 	"packuswb %%mm0, %%mm0;"     /* Pack into RGBA 0x0000000000bbggrr */
> 	"movd %%mm0, (%3);"          /* Store output */


More information about the Squeak-dev mailing list