[Ffmpeg-devel] Still struggling with -fPIC and MMX asm-code

Tobias Grimm listaccount
Sat Jul 16 00:45:24 CEST 2005

Michael Niedermayer schrieb:

>well, i dont want to ruin your good mood but this solution isnt safe either, 

Uhhh... here goes my free weekend :-)

>though its much better then before

At least it works now :-)

>the problem is that push and pop modify %%esp and gcc can and does sometimes 
>address memory operands through %%esp 

Wasn't aware of this. Thanks for the hint!

>IMHO the correct solution is to use -fomit-frame-pointer which increases the 

I try to avoid this to be able to debug ffmpeg, just in case I need to.

>if you want a quick solution and dont care that it will be slow as hell on 
>moderns cpus, try 2 xchgl %2, %%"REG_a" surrounding the movq or back it up 

Your'e right xchgl seems to be damn slow - at least from what I found by
google. Maybe because it locks the CPU bus and interrupts?

>with movl on the stack without changing %%esp 

Do you mean this way?

#if defined(PIC) && !defined(ARCH_X86_64)
            "movl %%"REG_b", 4(%%esp)        \n\t" // "push" REG_b
without modifying %esp
            "movl %2, %%"REG_b"            \n\t"       
            "movq (%%"REG_b", %%"REG_a"), %%mm5    \n\t" // qmat[i]
            "movl 4(%%esp),  %%"REG_b"        \n\t" // "pop" REG_b
without modifying %esp        
            "movq (%2, %%"REG_a"), %%mm5        \n\t" // qmat[i]

It works too. And if it's saver than using push/pop, this would be my
prefered solution.

>theres also the possibility of adding a int temp ... "+m"(temp) and store it 
>in that

Backing it up on the stack should be slightly faster, shouldn't it?


More information about the ffmpeg-devel mailing list