>From 01bf1bee748d5f05199644fd8eb316902c53ac75 Mon Sep 17 00:00:00 2001
From: kui zheng <kui.zh...@arm.com>
Date: Wed, 16 Nov 2011 16:15:30 +0800
Subject: [PATCH] generic: Add NEON verion of Sacc_add_to_Dacc


Signed-off-by: kui zheng <kui.zh...@arm.com>
---
src/gfx/generic/generic.c      |    2 +-
src/gfx/generic/generic_neon.h |   64 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 65 insertions(+), 1 deletions(-)

diff --git a/src/gfx/generic/generic.c b/src/gfx/generic/generic.c
index 246761c..d6b3b5c 100644
--- a/src/gfx/generic/generic.c
+++ b/src/gfx/generic/generic.c
@@ -9662,7 +9662,7 @@ static void gInit_NEON( void )
      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;
-
+     Sacc_add_to_Dacc = Sacc_add_to_Dacc_NEON;
}
 #endif
diff --git a/src/gfx/generic/generic_neon.h b/src/gfx/generic/generic_neon.h
index 4f1a5d8..6498638 100644
--- a/src/gfx/generic/generic_neon.h
+++ b/src/gfx/generic/generic_neon.h
@@ -316,3 +316,67 @@ static void SCacc_add_to_Dacc_NEON ( GenefxState *gfxs )
      }
}
+/*
+ * NEON verion of Sacc_add_to_Dacc.
+ */
+static void Sacc_add_to_Dacc_NEON ( GenefxState *gfxs )
+{
+     int                w = gfxs->length;
+     GenefxAccumulator  *D = gfxs->Dacc;
+     GenefxAccumulator  *S = gfxs->Sacc;
+     unsigned int       loop = w >> 3;
+     unsigned int       single = w & 0x7;
+     u16                maska = 0xf000;
+
+     while (single) {
+          if (!(D->RGB.a & 0xF000)) {
+               D->RGB.a += S->RGB.a;
+               D->RGB.r += S->RGB.r;
+               D->RGB.g += S->RGB.g;
+               D->RGB.b += S->RGB.b;
+          }
+          D++;
+          S++;
+          single--;
+     }
+     if (loop) {
+          __asm__ __volatile__ (
+               "mov          r4, %[D]           \n\t"
+               "mov          r5, %[S]           \n\t"
+               "mov          r6, %[D]           \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"
+               "pld          [r5, #0xC0]        \n\t"
+               "pld          [r5, #0x100]       \n\t"
+               "vld4.16      {d0, d2, d4, d6}, [r5]! \n\t"
+               "vld4.16      {d1, d3, d5, d7}, [r5]! \n\t"
+
+               "vand         q9, q7, q8         \n\t"
+               "vceq.i16     q9, q9, #0         \n\t"
+
+               "vand         q0, q9, q0         \n\t"
+               "vand         q1, q9, q1         \n\t"
+               "vand         q2, q9, q2         \n\t"
+               "vand         q3, q9, q3         \n\t"
+               "vadd.i16     q4, q4, q0         \n\t"
+               "vadd.i16     q5, q5, q1         \n\t"
+               "vadd.i16     q6, q6, q2         \n\t"
+               "vadd.i16     q7, q7, q3         \n\t"
+               "vst4.16      {d8, d10, d12, d14}, [r6]! \n\t"
+               "vst4.16      {d9, d11, d13, d15}, [r6]! \n\t"
+               "subs         %[loop], %[loop], #1       \n\t"
+               "bne          1b                     "
+               :
+               : [S] "r" (S), [D] "r" (D), [maska] "r" (maska), [loop] "r" 
(loop)
+               : "memory", "r4", "r5", "r6", "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: 0006-generic-Add-NEON-verion-of-Sacc_add_to_Dacc.patch
Description: 0006-generic-Add-NEON-verion-of-Sacc_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