On Tue, Apr 3, 2012 at 8:30 PM, Nemanja Lukic <[email protected]> wrote: > From: Nemanja Lukic <[email protected]>
> +LEAF_MIPS_DSPR2(pixman_composite_over_n_8_0565_asm_mips) > +/* > + * a0 - dst (r5g6b5) > + * a1 - src (32bit constant) > + * a2 - mask (a8) > + * a3 - w > + */ > + > + beqz a3, 3f > + nop > + li t4, 0x00ff00ff > + li t5, 0xff > + srl t6, a1, 24 /* t6 = srca */ > + beq t6, t5, 2f /* if (srca == 0xff) */ > + nop > +1: > + /* a1 = src */ > + lbu t0, 0(a2) /* t0 = mask */ > + beqz t0, 111f /* if (t0 == 0) */ > + addiu a2, a2, 1 > + lhu t1, 0(a0) /* t1 = dst */ > + CONVERT_1x0565_TO_1x8888 t1, t2, t3, t7 > + beq t0, t5, 11f /* if (t0 == 0xff) */ > + move t3, a1 > + > + MIPS_UN8x4_MUL_UN8 a1, t0, t3, t4, t7, t8, t9 > +11: > + not t6, t3 > + srl t6, t6, 24 > + MIPS_UN8x4_MUL_UN8 t2, t6, t2, t4, t7, t8, t9 > + addu_s.qb t1, t2, t3 > + CONVERT_1x8888_TO_1x0565 t1, t2, t3, t7 > + sh t2, 0(a0) > +111: > + addiu a3, a3, -1 > + bgtz a3, 1b > + addiu a0, a0, 2 > + b 3f > + nop > +2: > + /* a1 = src */ > + lbu t0, 0(a2) /* t0 = mask */ > + beqz t0, 222f /* if (t0 == 0) */ > + addiu a2, a2, 1 > + beq t0, t5, 22f /* if (t0 == 0xff) */ > + move t1, a1 > + lhu t1, 0(a0) /* t1 = dst */ > + > + CONVERT_1x0565_TO_1x8888 t1, t2, t3, t7 > + OVER_8888_8_8888 a1, t0, t2, t1, t4, t3, t7, t8, t9 > +22: > + CONVERT_1x8888_TO_1x0565 t1, t9, t3, t7 I think this can be improved a bit. When (srca == 0xff && mask == 0xff) there is no need to do 8888 to 0565 conversion on each iteration, it can be done once. > + sh t9, 0(a0) > +222: > + addiu a3, a3, -1 > + bgtz a3, 2b > + addiu a0, a0, 2 > +3: > + j ra > + nop > + > +END(pixman_composite_over_n_8_0565_asm_mips) -- Best regards, Siarhei Siamashka _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
