[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