Loongson: in_8_8 = L1: 97.57 L2: 96.29 M: 59.89 ( 41.50%) HT: 48.32 VT: 52.45 R: 52.03 RT: 19.02 ( 168Kops/s) in_8_8 = L1: 96.51 L2: 97.07 M: 59.73 ( 41.81%) HT: 48.47 VT: 52.80 R: 52.67 RT: 19.33 ( 177Kops/s)
ARM/iwMMXt: in_8_8 = L1: 105.12 L2: 82.73 M: 59.43 ( 35.38%) HT: 37.88 VT: 41.18 R: 36.14 RT: 15.52 ( 124Kops/s) in_8_8 = L1: 74.93 L2: 63.00 M: 46.19 ( 27.49%) HT: 33.81 VT: 48.70 R: 44.17 RT: 24.56 ( 152Kops/s) Signed-off-by: Matt Turner <[email protected]> --- pixman/pixman-mmx.c | 28 +++++++++++++++------------- 1 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c index e697c13..21ba076 100644 --- a/pixman/pixman-mmx.c +++ b/pixman/pixman-mmx.c @@ -2693,13 +2693,13 @@ mmx_composite_in_8_8 (pixman_implementation_t *imp, while (w && (unsigned long)dst & 3) { - uint8_t s, d; uint16_t tmp; + uint8_t s = *src; - s = *src; - d = *dst; - - *dst = MUL_UN8 (s, d, tmp); + if (s == 0) + *dst = 0; + else if (s != 0xff) + *dst = MUL_UN8 (s, *dst, tmp); src++; dst++; @@ -2708,10 +2708,12 @@ mmx_composite_in_8_8 (pixman_implementation_t *imp, while (w >= 4) { - uint32_t *s = (uint32_t *)src; - uint32_t *d = (uint32_t *)dst; + __m64 vsrc = load8888u ((uint32_t *)src); - store8888 (d, in (load8888u (s), load8888 (d))); + if (is_zero (vsrc)) + *(uint32_t *)dst = 0; + else + store8888 ((uint32_t *)dst, in (vsrc, load8888 ((uint32_t *)dst))); w -= 4; dst += 4; @@ -2720,13 +2722,13 @@ mmx_composite_in_8_8 (pixman_implementation_t *imp, while (w--) { - uint8_t s, d; uint16_t tmp; + uint8_t s = *src; - s = *src; - d = *dst; - - *dst = MUL_UN8 (s, d, tmp); + if (s == 0) + *dst = 0; + else if (s != 0xff) + *dst = MUL_UN8 (s, *dst, tmp); src++; dst++; -- 1.7.3.4 _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
