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"