hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1e33454772183563e0d2ffca6c961ff5822392ef

commit 1e33454772183563e0d2ffca6c961ff5822392ef
Author: ChunEon Park <chuneon.p...@samsung.com>
Date:   Tue Apr 7 23:06:43 2015 +0900

    evas common: make logic same to c code version.
    
    As C version,
    It increase alpha value by 1 to avoid loosing of the remains while it 
divides
    values. Neon version does same technique to make same results.
---
 src/lib/evas/common/evas_convert_color.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/src/lib/evas/common/evas_convert_color.c 
b/src/lib/evas/common/evas_convert_color.c
index d7056c8..c34e80b 100644
--- a/src/lib/evas/common/evas_convert_color.c
+++ b/src/lib/evas/common/evas_convert_color.c
@@ -32,7 +32,7 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int 
len)
    DATA32 *de = data + len;
    DATA32 nas = 0;
 
-   #ifdef BUILD_NEON
+#ifdef BUILD_NEON
    if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
      {
         uint8x8_t mask_0x00 = vdup_n_u8(0);
@@ -42,31 +42,30 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int 
len)
 
         while (data <= de - 8)
           {
-
              uint8x8x4_t rgba = vld4_u8(data);
 
-             cmp = vand_u8(vorr_u8(
-               vceq_u8(rgba.val[3], mask_0xff),
-               vceq_u8(rgba.val[3], mask_0x00)
-             ), mask_0x01);
+             cmp = vand_u8(vorr_u8(vceq_u8(rgba.val[3], mask_0xff),
+                                   vceq_u8(rgba.val[3], mask_0x00)),
+                           mask_0x01);
              nas += vpaddl_u32(vpaddl_u16(vpaddl_u8(cmp)));
 
              uint16x8x4_t lrgba;
-
              lrgba.val[0] = vmovl_u8(rgba.val[0]);
              lrgba.val[1] = vmovl_u8(rgba.val[1]);
              lrgba.val[2] = vmovl_u8(rgba.val[2]);
-
-             rgba.val[0] = vshrn_n_u16(vmlal_u8(lrgba.val[0], rgba.val[0], 
rgba.val[3]), 8);
-             rgba.val[1] = vshrn_n_u16(vmlal_u8(lrgba.val[1], rgba.val[1], 
rgba.val[3]), 8);
-             rgba.val[2] = vshrn_n_u16(vmlal_u8(lrgba.val[2], rgba.val[2], 
rgba.val[3]), 8);
-
+             lrgba.val[3] = vaddl_u8(rgba.val[3], mask_0x01);
+
+             rgba.val[0] = vshrn_n_u16(vmlaq_u16(lrgba.val[0], lrgba.val[0],
+                                                 lrgba.val[3]), 8);
+             rgba.val[1] = vshrn_n_u16(vmlaq_u16(lrgba.val[1], lrgba.val[1],
+                                                 lrgba.val[3]), 8);
+             rgba.val[2] = vshrn_n_u16(vmlaq_u16(lrgba.val[2], lrgba.val[2],
+                                                 lrgba.val[3]), 8);
              vst4_u8(data, rgba);
              data += 8;
-
           }
      }
-   #endif
+#endif
 
    while (data < de)
      {

-- 


Reply via email to