Mercurial > mplayer.hg
comparison liba52/resample_c.c @ 3577:6bf4dbfb941c
mmx opt
author | michael |
---|---|
date | Tue, 18 Dec 2001 02:48:14 +0000 |
parents | c282fd9e8534 |
children | 79759c05911e |
comparison
equal
deleted
inserted
replaced
3576:c282fd9e8534 | 3577:6bf4dbfb941c |
---|---|
318 s16[6*i+4] = convert (f[i+512]); | 318 s16[6*i+4] = convert (f[i+512]); |
319 s16[6*i+5] = convert (f[i]); | 319 s16[6*i+5] = convert (f[i]); |
320 } | 320 } |
321 break; | 321 break; |
322 case A52_2F2R | A52_LFE: | 322 case A52_2F2R | A52_LFE: |
323 #ifdef HAVE_MMX | |
324 asm volatile( | |
325 "movl $-1024, %%esi \n\t" | |
326 "movq magicF2W, %%mm7 \n\t" | |
327 // "pxor %%mm6, %%mm6 \n\t" | |
328 "1: \n\t" | |
329 "movq 1024(%1, %%esi), %%mm0 \n\t" | |
330 "movq 2048(%1, %%esi), %%mm1 \n\t" | |
331 "movq 3072(%1, %%esi), %%mm2 \n\t" | |
332 "movq 4096(%1, %%esi), %%mm3 \n\t" | |
333 "movq (%1, %%esi), %%mm5 \n\t" | |
334 "psubd %%mm7, %%mm0 \n\t" | |
335 "psubd %%mm7, %%mm1 \n\t" | |
336 "psubd %%mm7, %%mm2 \n\t" | |
337 "psubd %%mm7, %%mm3 \n\t" | |
338 "psubd %%mm7, %%mm5 \n\t" | |
339 "leal (%%esi, %%esi, 2), %%edi \n\t" | |
340 | |
341 "packssdw %%mm2, %%mm0 \n\t" // CcAa | |
342 "packssdw %%mm3, %%mm1 \n\t" // DdBb | |
343 "packssdw %%mm5, %%mm5 \n\t" // FfFf | |
344 "movq %%mm0, %%mm2 \n\t" // CcAa | |
345 "punpcklwd %%mm1, %%mm0 \n\t" // BAba | |
346 "punpckhwd %%mm1, %%mm2 \n\t" // DCdc | |
347 "pxor %%mm4, %%mm4 \n\t" // 0000 | |
348 "punpcklwd %%mm5, %%mm4 \n\t" // F0f0 | |
349 "movq %%mm0, %%mm1 \n\t" // BAba | |
350 "movq %%mm4, %%mm3 \n\t" // F0f0 | |
351 "punpckldq %%mm2, %%mm0 \n\t" // dcba | |
352 "punpckhdq %%mm1, %%mm1 \n\t" // BABA | |
353 "punpckldq %%mm1, %%mm4 \n\t" // BAf0 | |
354 "punpckhdq %%mm3, %%mm2 \n\t" // F0DC | |
355 | |
356 "movq %%mm0, (%0, %%edi) \n\t" | |
357 "movq %%mm4, 8(%0, %%edi) \n\t" | |
358 "movq %%mm2, 16(%0, %%edi) \n\t" | |
359 "addl $8, %%esi \n\t" | |
360 " jnz 1b \n\t" | |
361 "emms \n\t" | |
362 :: "r" (s16+1536), "r" (f+256) | |
363 :"%esi", "%edi", "memory" | |
364 ); | |
365 #else | |
323 for (i = 0; i < 256; i++) { | 366 for (i = 0; i < 256; i++) { |
324 s16[6*i] = convert (f[i+256]); | 367 s16[6*i] = convert (f[i+256]); |
325 s16[6*i+1] = convert (f[i+512]); | 368 s16[6*i+1] = convert (f[i+512]); |
326 s16[6*i+2] = convert (f[i+768]); | 369 s16[6*i+2] = convert (f[i+768]); |
327 s16[6*i+3] = convert (f[i+1024]); | 370 s16[6*i+3] = convert (f[i+1024]); |
328 s16[6*i+4] = 0; | 371 s16[6*i+4] = 0; |
329 s16[6*i+5] = convert (f[i]); | 372 s16[6*i+5] = convert (f[i]); |
330 } | 373 } |
374 #endif | |
331 break; | 375 break; |
332 case A52_3F2R | A52_LFE: | 376 case A52_3F2R | A52_LFE: |
333 #ifdef HAVE_MMX | 377 #ifdef HAVE_MMX |
334 asm volatile( | 378 asm volatile( |
335 "movl $-1024, %%esi \n\t" | 379 "movl $-1024, %%esi \n\t" |