MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines
authorNemanja Lukic <nemanja.lukic@rt-rk.com>
Wed, 23 May 2012 16:53:43 +0000 (18:53 +0200)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Wed, 23 May 2012 17:41:44 +0000 (13:41 -0400)
commitaea0522f6f1a51b97a673cfe4dc157e501008580
tree4baecf742f61fa0612d4472a5f415287287a0cb4
parent74bf5dc2f99245e7b486203b6ba074fb629eb5f3
MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines

In main loop (unrolled by factor 2), instead of negating multiplied
mask values by srca, values of srca was negated, and passed as alpha
argument for

    UN8x4_MUL_UN8x4_ADD_UN8x4 macro.

Instead of:

    ma = ~ma;
    UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);

Code was doing this:

    ma = ~srca;
    UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);

Key is in substituting registers s0/s1 (containing srca value), with
t0/t1 containing mask values multiplied by srca.  Register usage is
also improved (less registers are saved on stack, for
over_n_8888_8888_ca routine).

The bug was introduced in commit d2ee5631 and revealed by composite test.
pixman/pixman-mips-dspr2-asm.S