comparison i386/dsputil_mmx.c @ 342:8635a7036395 libavcodec

* fixes problem with -funroll-loops and buggy gcc compiler
author kabi
date Wed, 24 Apr 2002 12:18:59 +0000
parents 9c6f056f0e41
children f49629bab18d
comparison
equal deleted inserted replaced
341:bf26081c373c 342:8635a7036395
227 /* read the pixels */ 227 /* read the pixels */
228 p = block; 228 p = block;
229 pix = pixels; 229 pix = pixels;
230 MOVQ_ZERO(mm7); 230 MOVQ_ZERO(mm7);
231 i = 4; 231 i = 4;
232 while (i) { 232 do {
233 __asm __volatile( 233 __asm __volatile(
234 "movq %2, %%mm0\n\t" 234 "movq (%2), %%mm0\n\t"
235 "movq 8%2, %%mm1\n\t" 235 "movq 8(%2), %%mm1\n\t"
236 "movq 16%2, %%mm2\n\t" 236 "movq 16(%2), %%mm2\n\t"
237 "movq 24%2, %%mm3\n\t" 237 "movq 24(%2), %%mm3\n\t"
238 "movq %0, %%mm4\n\t" 238 "movq %0, %%mm4\n\t"
239 "movq %1, %%mm6\n\t" 239 "movq %1, %%mm6\n\t"
240 "movq %%mm4, %%mm5\n\t" 240 "movq %%mm4, %%mm5\n\t"
241 "punpcklbw %%mm7, %%mm4\n\t" 241 "punpcklbw %%mm7, %%mm4\n\t"
242 "punpckhbw %%mm7, %%mm5\n\t" 242 "punpckhbw %%mm7, %%mm5\n\t"
250 "packuswb %%mm1, %%mm0\n\t" 250 "packuswb %%mm1, %%mm0\n\t"
251 "packuswb %%mm3, %%mm2\n\t" 251 "packuswb %%mm3, %%mm2\n\t"
252 "movq %%mm0, %0\n\t" 252 "movq %%mm0, %0\n\t"
253 "movq %%mm2, %1\n\t" 253 "movq %%mm2, %1\n\t"
254 :"+m"(*pix), "+m"(*(pix+line_size)) 254 :"+m"(*pix), "+m"(*(pix+line_size))
255 :"m"(*p) 255 :"r"(p)
256 :"memory"); 256 :"memory");
257 pix += line_size*2; 257 pix += line_size*2;
258 p += 16; 258 p += 16;
259 i--; 259 } while (--i);
260 };
261 } 260 }
262 261
263 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) 262 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h)
264 { 263 {
265 int hh; 264 int hh;