>From c756309ce1d001d80a348a98ce6124dbcd018e81 Mon Sep 17 00:00:00 2001 From: kui zheng <kui.zh...@arm.com> Date: Wed, 16 Nov 2011 15:38:27 +0800 Subject: [PATCH] generic: Add NEON version of Sop_argb_to_Dacc
Signed-off-by: kui zheng <kui.zh...@arm.com> --- src/gfx/generic/generic.c | 1 + src/gfx/generic/generic_neon.h | 73 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 0 deletions(-) diff --git a/src/gfx/generic/generic.c b/src/gfx/generic/generic.c index 4938d56..4da46cc 100644 --- a/src/gfx/generic/generic.c +++ b/src/gfx/generic/generic.c @@ -9655,6 +9655,7 @@ static void gInit_NEON( void ) use_neon = 1; /********************************* 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; } #endif diff --git a/src/gfx/generic/generic_neon.h b/src/gfx/generic/generic_neon.h index 83b2a35..1220e71 100644 --- a/src/gfx/generic/generic_neon.h +++ b/src/gfx/generic/generic_neon.h @@ -107,3 +107,76 @@ static void Sop_rgb16_to_Dacc_NEON( GenefxState *gfxs ) } +/* + * NEON verion of Sop_argb_to_Dacc. + */ +static void Sop_argb_to_Dacc_NEON ( GenefxState *gfxs ) +{ + __asm__ __volatile__ ( + "mov r5, %[len] \n\t" + "cmp %[Ostep], #1 \n\t" + /* Ostep != 1 */ + "bne 1f \n\t" + + "lsrs r4, %[len], #3 \n\t" + /* Ostep = 1 && len < 8 */ + "beq 1f \n\t" + + /* Ostep = 1 && len >= 8 */ + "2: \n\t" + "pld [%[Sop], #0xC0] \n\t" + "vld4.8 {d0, d1, d2, d3}, [%[Sop]]! \n\t" + "vmovl.u8 q2, d0 \n\t" + "vmovl.u8 q3, d1 \n\t" + "vmovl.u8 q4, d2 \n\t" + "vmovl.u8 q5, d3 \n\t" + "vst4.16 {d4, d6, d8, d10}, [%[Dacc]]! \n\t" + "vst4.16 {d5, d7, d9, d11}, [%[Dacc]]! \n\t" + "subs r4, r4, #1 \n\t" + "bne 2b \n\t" + + "ands r5, %[len], #7 \n\t" + /* Ostep = 1 && len = 8 */ + "beq 5f \n\t" + + "1: \n\t" + "lsl r6, %[Ostep], #2 \n\t" + "vmov.i32 d0, #0 \n\t" + "vmov d1, d0 \n\t" + "vmov d2, d0 \n\t" + "vmov d3, d0 \n\t" + "lsrs r4, r5, #2 \n\t" + /* len < 4 */ + "beq 4f \n\t" + + /* len >= 4 */ + "3: \n\t" + "pld [%[Sop], #0xC0] \n\t" + "vld4.8 {d0[0], d1[0], d2[0], d3[0]}, [%[Sop]],r6 \n\t" + "vld4.8 {d0[2], d1[2], d2[2], d3[2]}, [%[Sop]],r6 \n\t" + "vld4.8 {d0[4], d1[4], d2[4], d3[4]}, [%[Sop]],r6 \n\t" + "vld4.8 {d0[6], d1[6], d2[6], d3[6]}, [%[Sop]],r6 \n\t" + "vst4.16 {d0, d1, d2, d3}, [%[Dacc]]! \n\t" + "subs r4, r4, #1 \n\t" + "bne 3b \n\t" + + "ands r5, %[len], #3 \n\t" + /* len = 4 */ + "beq 5f \n\t" + + "4: \n\t" + "vld4.8 {d0[0], d1[0], d2[0], d3[0]}, [%[Sop]],r6 \n\t" + "vst4.16 {d0[0], d1[0], d2[0], d3[0]}, [%[Dacc]]! \n\t" + "subs r5, r5, #1 \n\t" + "bne 4b \n\t" + + "5: " + : + : [Sop] "r" (gfxs->Sop[0]), [Dacc] "r" (gfxs->Dacc), + [len] "r" (gfxs->length), [Ostep] "r" (gfxs->Ostep) + : "memory", "r4", "r5", "r6", "d0", "d1", "d2", "d3", + "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11" + ); +} + + -- 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.
0003-generic-Add-NEON-version-of-Sop_argb_to_Dacc.patch
Description: 0003-generic-Add-NEON-version-of-Sop_argb_to_Dacc.patch
_______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev