>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.

Attachment: 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

Reply via email to