[FFmpeg-devel] [PATCH] EA TGQ video fixes

Michael Niedermayer michaelni
Thu Apr 16 20:20:05 CEST 2009


On Thu, Apr 16, 2009 at 07:03:17PM +0100, M?ns Rullg?rd wrote:
> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
> 
> > On Thu, Apr 16, 2009 at 07:46:38PM +0200, Vitor Sessak wrote:
> >> Reimar D?ffinger wrote:
> >> >> > -    DCTELEM block[6][64];
> >> >> > +    DECLARE_ALIGNED_8(DCTELEM, block[6][64]);
> >> >> >  
> >> >> >      mode = bytestream_get_byte((const uint8_t**)bs);
> >> >> >      if (mode>buf_end-*bs) {
> >> > 
> >> > Moving it into the context instead should be more reliable.
> >> 
> >> Why?
> >
> > Because you are declaring a stack variable as aligned which only works
> > up to the value that the stack is already aligned usually which in the
> > past on e.g. Windows usually meant it wouldn't be aligned.
> > The situation should be better now but I doubt it is flawless and I also
> > don't really see a point in keeping the variable on the stack anyway.
> 
> Very few platforms are capable of aligning stack variables to 16 bytes
> or more.  It's pretty much only gcc on x86, and then only if main()

may i protest, its not a limitation of platforms but compilers.
you certainly can align the stack as much as you like by using asm()

also theres no relation to main() beyond the compilers just being utter
crap.

the following will fix up alignment in a nearly porable way given that
the function uses the right amount of stack space itself
align_stack(func_ptr, int align){
    some variables
    if(stack is not aligned by align)
        return align_stack(func_ptr, align);
    else
        return func_ptr()
}

a variable size array could also be used to achive this like
align_stack2(func_ptr, int eat){
    volatile char x[eat];
    return func_ptr();
}

for(i=0; i<123; i++)
    if(align_stack2(check_align, i))
        break;
eat= i;

anyway, iam of course aware this stuff above has issues like when a compiler
tries to preserve (non existing) alignment
but that just from a users POV, a compiler itself could easily fix things
up using such an approuch

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The greatest way to live with honor in this world is to be what we pretend
to be. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090416/97649af2/attachment.pgp>



More information about the ffmpeg-devel mailing list