rom 08b847272d6194711ea95e8f8edfa92712e6f51b Mon Sep 17 00:00:00 2001 From: kui zheng <kui.zh...@arm.com> Date: Wed, 16 Nov 2011 16:03:53 +0800 Subject: [PATCH] generic: Add NEON version of SCacc_add_to_Dacc
Signed-off-by: kui zheng <kui.zh...@arm.com> --- src/gfx/generic/generic.c | 3 ++ src/gfx/generic/generic_neon.h | 61 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 0 deletions(-) diff --git a/src/gfx/generic/generic.c b/src/gfx/generic/generic.c index dc5826a..246761c 100644 --- a/src/gfx/generic/generic.c +++ b/src/gfx/generic/generic.c @@ -9660,6 +9660,9 @@ static void gInit_NEON( void ) /********************************* Sop_PFI_to_Dacc ****************************/ Sop_PFI_to_Dacc[DFB_PIXELFORMAT_INDEX(DSPF_RGB16)] = Sop_rgb16_to_Dacc_NEON; Sop_PFI_to_Dacc[DFB_PIXELFORMAT_INDEX(DSPF_ARGB )] = Sop_argb_to_Dacc_NEON; +/********************************* misc accumulator operations ****************/ + SCacc_add_to_Dacc = SCacc_add_to_Dacc_NEON; + } #endif diff --git a/src/gfx/generic/generic_neon.h b/src/gfx/generic/generic_neon.h index 3c63a79..4f1a5d8 100644 --- a/src/gfx/generic/generic_neon.h +++ b/src/gfx/generic/generic_neon.h @@ -255,3 +255,64 @@ static void Bop_rgb32_to_Aop_rgb16_LE_NEON( GenefxState *gfxs ) ); } +/* + * NEON verion of SCacc_add_to_Dacc. + */ +static void SCacc_add_to_Dacc_NEON ( GenefxState *gfxs ) +{ + int w = gfxs->length; + GenefxAccumulator *D = gfxs->Dacc; + GenefxAccumulator SCacc = gfxs->SCacc; + unsigned int loop = w >> 3; + unsigned int single = w & 0x7; + u16 maska = 0xf000; + + while (single) { + if (!(D->RGB.a & 0xF000)) { + D->RGB.a += SCacc.RGB.a; + D->RGB.r += SCacc.RGB.r; + D->RGB.g += SCacc.RGB.g; + D->RGB.b += SCacc.RGB.b; + } + D++; + single--; + } + if (loop) { + __asm__ __volatile__ ( + "mov r4, %[D] \n\t" + "mov r5, %[D] \n\t" + "vdup.16 q3, %[SCacc_a] \n\t" + "vdup.16 q2, %[SCacc_r] \n\t" + "vdup.16 q1, %[SCacc_g] \n\t" + "vdup.16 q0, %[SCacc_b] \n\t" + "vdup.16 q8, %[maska] \n\t" + "1: \n\t" + "pld [r4, #0xC0] \n\t" + "pld [r4, #0x100] \n\t" + "vld4.16 {d8, d10, d12, d14}, [r4]! \n\t" + "vld4.16 {d9, d11, d13, d15}, [r4]! \n\t" + "vand q9, q7, q8 \n\t" + "vceq.i16 q9, q9, #0 \n\t" + "vand q10, q9, q0 \n\t" + "vand q11, q9, q1 \n\t" + "vand q12, q9, q2 \n\t" + "vand q13, q9, q3 \n\t" + "vadd.i16 q4, q4, q10 \n\t" + "vadd.i16 q5, q5, q11 \n\t" + "vadd.i16 q6, q6, q12 \n\t" + "vadd.i16 q7, q7, q13 \n\t" + "vst4.16 {d8, d10, d12, d14}, [r5]! \n\t" + "vst4.16 {d9, d11, d13, d15}, [r5]! \n\t" + "subs %[loop], %[loop], #1 \n\t" + "bne 1b " + : + : [SCacc_a] "r" (gfxs->SCacc.RGB.a), [SCacc_r] "r" (gfxs->SCacc.RGB.r), + [SCacc_g] "r" (gfxs->SCacc.RGB.g), [SCacc_b] "r" (gfxs->SCacc.RGB.b), + [D] "r" (D), [maska] "r" (maska), [loop] "r" (loop) + : "memory", "r4", "r5", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", + "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", + "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27" + ); + } +} + -- 1.7.1 -- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
0005-generic-Add-NEON-version-of-SCacc_add_to_Dacc.patch
Description: 0005-generic-Add-NEON-version-of-SCacc_add_to_Dacc.patch
_______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev