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.

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

Reply via email to