comparison postproc/postprocess_template.c @ 3171:3a325e7f6e1d

faster brightness correcture in MMX2
author michael
date Wed, 28 Nov 2001 01:26:03 +0000
parents b2e24fec97bc
children 365e9a92498d
comparison
equal deleted inserted replaced
3170:59d8aea76341 3171:3a325e7f6e1d
2462 "leal (%0,%2), %%eax \n\t" 2462 "leal (%0,%2), %%eax \n\t"
2463 "leal (%1,%3), %%ebx \n\t" 2463 "leal (%1,%3), %%ebx \n\t"
2464 "movq packedYOffset, %%mm2 \n\t" 2464 "movq packedYOffset, %%mm2 \n\t"
2465 "movq packedYScale, %%mm3 \n\t" 2465 "movq packedYScale, %%mm3 \n\t"
2466 "pxor %%mm4, %%mm4 \n\t" 2466 "pxor %%mm4, %%mm4 \n\t"
2467 2467 #ifdef HAVE_MMX2
2468 #define SCALED_CPY(src1, src2, dst1, dst2) \
2469 "movq " #src1 ", %%mm0 \n\t"\
2470 "movq " #src1 ", %%mm5 \n\t"\
2471 "movq " #src2 ", %%mm1 \n\t"\
2472 "movq " #src2 ", %%mm6 \n\t"\
2473 "punpcklbw %%mm0, %%mm0 \n\t"\
2474 "punpckhbw %%mm5, %%mm5 \n\t"\
2475 "punpcklbw %%mm1, %%mm1 \n\t"\
2476 "punpckhbw %%mm6, %%mm6 \n\t"\
2477 "pmulhuw %%mm3, %%mm0 \n\t"\
2478 "pmulhuw %%mm3, %%mm5 \n\t"\
2479 "pmulhuw %%mm3, %%mm1 \n\t"\
2480 "pmulhuw %%mm3, %%mm6 \n\t"\
2481 "psubw %%mm2, %%mm0 \n\t"\
2482 "psubw %%mm2, %%mm5 \n\t"\
2483 "psubw %%mm2, %%mm1 \n\t"\
2484 "psubw %%mm2, %%mm6 \n\t"\
2485 "packuswb %%mm5, %%mm0 \n\t"\
2486 "packuswb %%mm6, %%mm1 \n\t"\
2487 "movq %%mm0, " #dst1 " \n\t"\
2488 "movq %%mm1, " #dst2 " \n\t"\
2489
2490 #else //HAVE_MMX2
2468 #define SCALED_CPY(src1, src2, dst1, dst2) \ 2491 #define SCALED_CPY(src1, src2, dst1, dst2) \
2469 "movq " #src1 ", %%mm0 \n\t"\ 2492 "movq " #src1 ", %%mm0 \n\t"\
2470 "movq " #src1 ", %%mm5 \n\t"\ 2493 "movq " #src1 ", %%mm5 \n\t"\
2471 "punpcklbw %%mm4, %%mm0 \n\t"\ 2494 "punpcklbw %%mm4, %%mm0 \n\t"\
2472 "punpckhbw %%mm4, %%mm5 \n\t"\ 2495 "punpckhbw %%mm4, %%mm5 \n\t"\
2489 "packuswb %%mm5, %%mm0 \n\t"\ 2512 "packuswb %%mm5, %%mm0 \n\t"\
2490 "packuswb %%mm6, %%mm1 \n\t"\ 2513 "packuswb %%mm6, %%mm1 \n\t"\
2491 "movq %%mm0, " #dst1 " \n\t"\ 2514 "movq %%mm0, " #dst1 " \n\t"\
2492 "movq %%mm1, " #dst2 " \n\t"\ 2515 "movq %%mm1, " #dst2 " \n\t"\
2493 2516
2517 #endif //!HAVE_MMX2
2518
2494 SCALED_CPY((%0) , (%0, %2) , (%1) , (%1, %3)) 2519 SCALED_CPY((%0) , (%0, %2) , (%1) , (%1, %3))
2495 SCALED_CPY((%0, %2, 2), (%%eax, %2, 2), (%1, %3, 2), (%%ebx, %3, 2)) 2520 SCALED_CPY((%0, %2, 2), (%%eax, %2, 2), (%1, %3, 2), (%%ebx, %3, 2))
2496 SCALED_CPY((%0, %2, 4), (%%eax, %2, 4), (%1, %3, 4), (%%ebx, %3, 4)) 2521 SCALED_CPY((%0, %2, 4), (%%eax, %2, 4), (%1, %3, 4), (%%ebx, %3, 4))
2497 "leal (%%eax,%2,4), %%eax \n\t" 2522 "leal (%%eax,%2,4), %%eax \n\t"
2498 "leal (%%ebx,%3,4), %%ebx \n\t" 2523 "leal (%%ebx,%3,4), %%ebx \n\t"
2676 { 2701 {
2677 if(clipped < maxClipped) break; 2702 if(clipped < maxClipped) break;
2678 clipped-= yHistogram[white]; 2703 clipped-= yHistogram[white];
2679 } 2704 }
2680 2705
2706 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black);
2707
2708 #ifdef HAVE_MMX2
2709 packedYScale= (uint16_t)(scale*256.0 + 0.5);
2710 packedYOffset= (((black*packedYScale)>>8) - minAllowedY) & 0xFFFF;
2711 #else
2712 packedYScale= (uint16_t)(scale*1024.0 + 0.5);
2681 packedYOffset= (black - minAllowedY) & 0xFFFF; 2713 packedYOffset= (black - minAllowedY) & 0xFFFF;
2714 #endif
2715
2682 packedYOffset|= packedYOffset<<32; 2716 packedYOffset|= packedYOffset<<32;
2683 packedYOffset|= packedYOffset<<16; 2717 packedYOffset|= packedYOffset<<16;
2684 2718
2685 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black);
2686
2687 packedYScale= (uint16_t)(scale*1024.0 + 0.5);
2688 packedYScale|= packedYScale<<32; 2719 packedYScale|= packedYScale<<32;
2689 packedYScale|= packedYScale<<16; 2720 packedYScale|= packedYScale<<16;
2690 } 2721 }
2691 else 2722 else
2692 { 2723 {