[gst-devel] Compilation troubles

Richard Boulton richard.boulton at harvey.muscat.com
Sun Jun 4 22:12:49 CEST 2000


On Sun, Jun 04, 2000 at 10:02:13PM +0200, Wim Taymans wrote:
> Do the same errors appear in video.c in the mpeg_play element? It has
> a similar type of mmx asm.

plugins/mpeg1/mpeg_play/video.c compiles perfectly: not even a warning.

> > /tmp/ccwG7VeD.s: Assembler messages:
> > /tmp/ccwG7VeD.s:3087: Error: suffix or operands invalid for `pand'
> > /tmp/ccwG7VeD.s:3098: Error: suffix or operands invalid for `pand'
> > /tmp/ccwG7VeD.s:3138: Error: suffix or operands invalid for `pand'
> > /tmp/ccwG7VeD.s:3149: Error: suffix or operands invalid for `pand'
> > /tmp/ccwG7VeD.s:3185: Error: suffix or operands invalid for `pand'
> > /tmp/ccwG7VeD.s:3196: Error: suffix or operands invalid for `pand'
> 
> any chance you could send me a copy of that /tmp file? a few lines 
> around 3087 should be enough to see what happens.

Here: lines 3070 to 3125...

I notice that all these lines have pand instructions which have %eax as
the first argument (though I have little x86 assembly knowledge, so I
have no idea if that is significant).

-----BEGIN CODE-----
        jne .L378
#APP
        pxor %mm7, %mm7
        pxor %mm6, %mm6
#NO_APP
        cmpl %ebp,%eax
        jge .L373
        movl MMX_MASK_1 at GOTOFF(%ebx),%eax
        movl 4+MMX_MASK_1 at GOTOFF(%ebx),%edx
        testl $1,%ebp
        je .L375
#APP
        movq (%ecx), %mm0
        movq %mm0, %mm5
        movq 1(%ecx), %mm2
        movq MMX_MASK_2 at GOTOFF(%ebx), %mm4
        por %mm2, %mm5
        pand %eax, %mm5
        pand %mm4, %mm0
        pand %mm4, %mm2
        psrlq $1, %mm0
        psrlq $1, %mm2
        paddusb %mm2, %mm0
        paddusb %mm5, %mm0
        movq 8(%ecx), %mm3
        movq %mm3, %mm1
        movq 9(%ecx), %mm2
        por %mm2, %mm1
        pand %eax, %mm1
        pand %mm4, %mm3
        pand %mm4, %mm2
        psrlq $1, %mm3
        psrlq $1, %mm2
        paddusb %mm2, %mm3
        paddusb %mm1, %mm3
        movq (%esi), %mm1
        movq %mm0, %mm2
        psubusb %mm1, %mm0
        psubusb %mm2, %mm1
        movq 8(%esi), %mm4
        por %mm1, %mm0
        movq %mm3, %mm5
        movq %mm0, %mm1
        psubusb %mm4, %mm3
        punpcklbw %mm6, %mm0
        psubusb %mm5, %mm4
        por %mm4, %mm3
        punpckhbw %mm6, %mm1
        movq %mm3, %mm4
        punpcklbw %mm6, %mm3
        paddw %mm0, %mm7
        paddw %mm1, %mm7
        punpckhbw %mm6, %mm4
        paddw %mm3, %mm7
        paddw %mm4, %mm7
#NO_APP
-----END CODE-----

> The pandn instruction is worse, it is broken on my compiler. :-(
:(

It may also be worth you knowing that I can't get the CVS version of
gst/gsttrace.c to work: I'm compiling using the hack below, as previously
suggested here.  I don't know whether this has the same functionality as
what's there at the moment: if so, perhaps it should be committed?

#define rdtscll(result) \
        __asm__ __volatile__("rdtsc" : "=A" (result) : /* No inputs */ )

-- 
Richard




More information about the gstreamer-devel mailing list