Mercurial > libavcodec.hg
comparison i386/dsputil_mmx.c @ 420:bbaf743f353f libavcodec
* cleanup for put_pixels_mmx
author | kabi |
---|---|
date | Thu, 23 May 2002 15:48:30 +0000 |
parents | b2fb2081dab5 |
children | cce83064710a |
comparison
equal
deleted
inserted
replaced
419:b71190bacce8 | 420:bbaf743f353f |
---|---|
265 } while (--i); | 265 } while (--i); |
266 } | 266 } |
267 | 267 |
268 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) | 268 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) |
269 { | 269 { |
270 #if 0 //FIXME h==4 case | 270 asm volatile |
271 asm volatile( | 271 ( |
272 "xorl %%eax, %%eax \n\t" | 272 "lea (%3, %3), %%eax \n\t" |
273 "movl %3, %%esi \n\t" | 273 #ifdef PIC |
274 "1: \n\t" | 274 ".balign 16 \n\t" |
275 "movq (%1, %%eax), %%mm0 \n\t" | |
276 "movq %%mm0, (%0, %%eax) \n\t" | |
277 "addl %2, %%eax \n\t" | |
278 "movq (%1, %%eax), %%mm0 \n\t" | |
279 "movq %%mm0, (%0, %%eax) \n\t" | |
280 "addl %2, %%eax \n\t" | |
281 "movq (%1, %%eax), %%mm0 \n\t" | |
282 "movq %%mm0, (%0, %%eax) \n\t" | |
283 "addl %2, %%eax \n\t" | |
284 "movq (%1, %%eax), %%mm0 \n\t" | |
285 "movq %%mm0, (%0, %%eax) \n\t" | |
286 "addl %2, %%eax \n\t" | |
287 "movq (%1, %%eax), %%mm0 \n\t" | |
288 "movq %%mm0, (%0, %%eax) \n\t" | |
289 "addl %2, %%eax \n\t" | |
290 "movq (%1, %%eax), %%mm0 \n\t" | |
291 "movq %%mm0, (%0, %%eax) \n\t" | |
292 "addl %2, %%eax \n\t" | |
293 "movq (%1, %%eax), %%mm0 \n\t" | |
294 "movq %%mm0, (%0, %%eax) \n\t" | |
295 "addl %2, %%eax \n\t" | |
296 "movq (%1, %%eax), %%mm0 \n\t" | |
297 "movq %%mm0, (%0, %%eax) \n\t" | |
298 "addl %2, %%eax \n\t" | |
299 "subl $8, %%esi \n\t" | |
300 " jnz 1b \n\t" | |
301 :: "r" (block), "r" (pixels), "r"(line_size), "m"(h) | |
302 : "%eax", "%esi", "memory" | |
303 ); | |
304 #else | |
305 asm volatile( | |
306 "xorl %%eax, %%eax \n\t" | |
307 "movl %3, %%esi \n\t" | |
308 "1: \n\t" | |
309 "movq (%1, %%eax), %%mm0 \n\t" | |
310 "movq %%mm0, (%0, %%eax) \n\t" | |
311 "addl %2, %%eax \n\t" | |
312 "movq (%1, %%eax), %%mm0 \n\t" | |
313 "movq %%mm0, (%0, %%eax) \n\t" | |
314 "addl %2, %%eax \n\t" | |
315 "movq (%1, %%eax), %%mm0 \n\t" | |
316 "movq %%mm0, (%0, %%eax) \n\t" | |
317 "addl %2, %%eax \n\t" | |
318 "movq (%1, %%eax), %%mm0 \n\t" | |
319 "movq %%mm0, (%0, %%eax) \n\t" | |
320 "addl %2, %%eax \n\t" | |
321 "subl $4, %%esi \n\t" | |
322 " jnz 1b \n\t" | |
323 :: "r" (block), "r" (pixels), "r"(line_size), "m"(h) | |
324 : "%eax", "%esi", "memory" | |
325 ); | |
326 #endif | 275 #endif |
276 "1: \n\t" | |
277 "movq (%1), %%mm0 \n\t" | |
278 "movq (%1, %3), %%mm1 \n\t" | |
279 "movq %%mm0, (%2) \n\t" | |
280 "movq %%mm1, (%2, %3) \n\t" | |
281 "addl %%eax, %1 \n\t" | |
282 "addl %%eax, %2 \n\t" | |
283 "movq (%1), %%mm0 \n\t" | |
284 "movq (%1, %3), %%mm1 \n\t" | |
285 "movq %%mm0, (%2) \n\t" | |
286 "movq %%mm1, (%2, %3) \n\t" | |
287 "addl %%eax, %1 \n\t" | |
288 "addl %%eax, %2 \n\t" | |
289 "subl $4, %0 \n\t" | |
290 "jnz 1b \n\t" | |
291 : "+g"(h), "+r" (pixels), "+r" (block) | |
292 : "r"(line_size) | |
293 : "%eax", "memory" | |
294 ); | |
327 } | 295 } |
328 | 296 |
329 static void put_pixels_x2_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) | 297 static void put_pixels_x2_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) |
330 { | 298 { |
331 UINT8 *p; | 299 UINT8 *p; |