comparison liba52/downmix.c @ 3624:0e4ff1cac6a2

sse opt of mix32to2()
author michael
date Wed, 19 Dec 2001 18:58:05 +0000
parents 35b18ed357c2
children 84ff13d4540c
comparison
equal deleted inserted replaced
3623:3f1c2c06d0d8 3624:0e4ff1cac6a2
409 static void mix32to2 (sample_t * samples, sample_t bias) 409 static void mix32to2 (sample_t * samples, sample_t bias)
410 { 410 {
411 int i; 411 int i;
412 sample_t common; 412 sample_t common;
413 413
414 #ifdef HAVE_SSE
415 asm volatile(
416 "movlps %1, %%xmm7 \n\t"
417 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
418 "movl $-1024, %%esi \n\t"
419 "1: \n\t"
420 "movaps 1024(%0, %%esi), %%xmm0 \n\t"
421 "addps %%xmm7, %%xmm0 \n\t" // common
422 "movaps %%xmm0, %%xmm1 \n\t" // common
423 "addps (%0, %%esi), %%xmm0 \n\t"
424 "addps 2048(%0, %%esi), %%xmm1 \n\t"
425 "addps 3072(%0, %%esi), %%xmm0 \n\t"
426 "addps 4096(%0, %%esi), %%xmm1 \n\t"
427 "movaps %%xmm0, (%0, %%esi) \n\t"
428 "movaps %%xmm1, 1024(%0, %%esi) \n\t"
429 "addl $16, %%esi \n\t"
430 " jnz 1b \n\t"
431 :: "r" (samples+256), "m" (bias)
432 : "%esi"
433 );
434 #else
414 for (i = 0; i < 256; i++) { 435 for (i = 0; i < 256; i++) {
415 common = samples[i + 256] + bias; 436 common = samples[i + 256] + bias;
416 samples[i] += common + samples[i + 768]; 437 samples[i] += common + samples[i + 768];
417 samples[i + 256] = common + samples[i + 512] + samples[i + 1024]; 438 samples[i + 256] = common + samples[i + 512] + samples[i + 1024];
418 } 439 }
440 #endif
419 } 441 }
420 442
421 static void mix32toS (sample_t * samples, sample_t bias) 443 static void mix32toS (sample_t * samples, sample_t bias)
422 { 444 {
423 int i; 445 int i;