[Mplayer-cvslog] CVS: main/postproc rgb2rgb_template.c,1.54,1.55

Michael Niedermayer michaelni at gmx.at
Mon Jul 1 10:25:36 CEST 2002


Hi

On Monday 01 July 2002 09:06, Nick Kurshev wrote:
[...]
> > --- rgb2rgb_template.c	29 Jun 2002 21:26:15 -0000	1.54
> > +++ rgb2rgb_template.c	29 Jun 2002 21:43:28 -0000	1.55
> > @@ -256,13 +256,13 @@
> >    register const uint8_t* s=src;
> >    register uint8_t* d=dst;
> >    register const uint8_t *end;
> > -  uint8_t *mm_end;
> > +  const uint8_t *mm_end;
> >    end = s + src_size;
> >  #ifdef HAVE_MMX
> >    __asm __volatile(PREFETCH"	%0"::"m"(*s));
> >    __asm __volatile("movq	%0, %%mm7"::"m"(mask15rg));
> >    __asm __volatile("movq	%0, %%mm6"::"m"(mask15b));
> > -  mm_end = (uint8_t*)((((unsigned long)end)/16)*16);
> > +  mm_end = end - 15;
>
> IMHO it would be better to use something like this:
> mm_end = end & ~15
thats identical to what it was before and it overwrites upto 15 bytes at the 
end of the array, just make cs_test && ./cs_test mmx if u dont believe me

> else your code allow integer computing anyway (even if size of data is
> 256-byte aligned). This code should prevent only accessing of last part of
> data which can't be fitted into MMX registers and can cause segfault due
> array's index out of range [snip]
if src_size is a multiple of 16 than only mmx will be used ...

[...]

Michael



More information about the MPlayer-cvslog mailing list