Bug 151188

Summary: [EFL] Fix EFL 1.16 with enabled NEON support
Product: WebKit Reporter: Csaba Osztrogonác <ossy>
Component: New BugsAssignee: Csaba Osztrogonác <ossy>
Status: RESOLVED FIXED    
Severity: Normal CC: gyuyoung.kim, hs85.jeong, jh718.park, ossy
Priority: P2    
Version: Other   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 108645, 150228    
Attachments:
Description Flags
Patch none

Description Csaba Osztrogonác 2015-11-12 05:16:33 PST
http://trac.webkit.org/changeset/192358 bumped the EFL version from 1.15 to 1.16,
but unfortunately 1.16 build is broken on ARM with enabled NEON support. :(

lib/ector/software/ector_drawhelper_neon.c: In function 'comp_func_solid_source_over_neon':
lib/ector/software/ector_drawhelper_neon.c:46:4: error: unknown type name 'DATA32'
    DATA32 *start = dest;
    ^
lib/ector/software/ector_drawhelper_neon.c:46:20: warning: pointer targets in initialization differ in signedness [-Wpointer-sign]
    DATA32 *start = dest;
                    ^
lib/ector/software/ector_drawhelper_neon.c:48:4: error: unknown type name 'DATA32'
    DATA32 *end = start + (size & ~7);
    ^
lib/ector/software/ector_drawhelper_neon.c:58:9: warning: pointer targets in passing argument 1 of 'vld1q_u32' differ in signedness [-Wpointer-sign]
         d0_32x4 = vld1q_u32(start);
         ^
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:19989:1: note: expected 'const uint32_t *' but argument is of type 'int *'
 vld1q_u32 (const uint32_t *a)
 ^
lib/ector/software/ector_drawhelper_neon.c:59:9: warning: pointer targets in passing argument 1 of 'vld1q_u32' differ in signedness [-Wpointer-sign]
         d1_32x4 = vld1q_u32(start+4);
         ^
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:19989:1: note: expected 'const uint32_t *' but argument is of type 'int *'
 vld1q_u32 (const uint32_t *a)
 ^
lib/ector/software/ector_drawhelper_neon.c:87:9: warning: pointer targets in passing argument 1 of 'vst1q_u32' differ in signedness [-Wpointer-sign]
         vst1q_u32(start, d0_32x4);
         ^
  CC       lib/ecore/lib_ecore_libecore_la-ecore.lo
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:24488:1: note: expected 'uint32_t *' but argument is of type 'int *'
 vst1q_u32 (uint32_t *a, uint32x4_t b)
 ^
lib/ector/software/ector_drawhelper_neon.c:88:9: warning: pointer targets in passing argument 1 of 'vst1q_u32' differ in signedness [-Wpointer-sign]
         vst1q_u32(start+4, d1_32x4);
         ^
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:24488:1: note: expected 'uint32_t *' but argument is of type 'int *'
 vst1q_u32 (uint32_t *a, uint32x4_t b)
 ^
lib/ector/software/ector_drawhelper_neon.c:95:9: warning: implicit declaration of function 'MUL_256' [-Wimplicit-function-declaration]
         *start = color + MUL_256(alpha, *start);
         ^
lib/ector/software/ector_drawhelper_neon.c: In function 'comp_func_source_over_sse2':
lib/ector/software/ector_drawhelper_neon.c:138:4: error: unknown type name 'DATA32'
    DATA32 *start;
    ^
lib/ector/software/ector_drawhelper_neon.c:139:4: error: unknown type name 'DATA32'
    DATA32 *end;
    ^
lib/ector/software/ector_drawhelper_neon.c:151:10: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
    start = dest;
          ^
lib/ector/software/ector_drawhelper_neon.c:152:11: error: 'l' undeclared (first use in this function)
    size = l;
           ^
lib/ector/software/ector_drawhelper_neon.c:152:11: note: each undeclared identifier is reported only once for each function it appears in
lib/ector/software/ector_drawhelper_neon.c:160:9: warning: pointer targets in passing argument 1 of 'vld1q_u32' differ in signedness [-Wpointer-sign]
         d_32x4 = vld1q_u32(start);
         ^
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:19989:1: note: expected 'const uint32_t *' but argument is of type 'int *'
 vld1q_u32 (const uint32_t *a)
 ^
lib/ector/software/ector_drawhelper_neon.c:198:9: warning: pointer targets in passing argument 1 of 'vst1q_u32' differ in signedness [-Wpointer-sign]
         vst1q_u32(start, d_32x4);
         ^
In file included from lib/ector/software/ector_drawhelper_neon.c:9:0:
/usr/lib/gcc/aarch64-linux-gnu/4.8/include/arm_neon.h:24488:1: note: expected 'uint32_t *' but argument is of type 'int *'
 vst1q_u32 (uint32_t *a, uint32x4_t b)
 ^
lib/ector/software/ector_drawhelper_neon.c:207:9: error: unknown type name 'DATA32'
         DATA32 sc = MUL4_SYM(color, *s);
         ^
lib/ector/software/ector_drawhelper_neon.c:207:9: warning: implicit declaration of function 'MUL4_SYM' [-Wimplicit-function-declaration]
lib/ector/software/ector_drawhelper_neon.c:207:38: error: 's' undeclared (first use in this function)
         DATA32 sc = MUL4_SYM(color, *s);
                                      ^
lib/ector/software/ector_drawhelper_neon.c:208:9: error: unknown type name 'DATA32'
         DATA32 alpha = 256 - (sc >> 24);
         ^
lib/ector/software/ector_drawhelper_neon.c:103:85: warning: unused parameter 'length' [-Wunused-parameter]
 comp_func_source_over_sse2(uint * __restrict dest, const uint * __restrict src, int length, uint color, uint const_alpha)
                                                                                     ^
lib/ector/software/ector_drawhelper_neon.c: In function 'init_draw_helper_neon':
lib/ector/software/ector_drawhelper_neon.c:228:42: error: 'comp_func_source_over_neon' undeclared (first use in this function)
         func_for_mode[ECTOR_ROP_BLEND] = comp_func_source_over_neon;
                                          ^
lib/ector/software/ector_drawhelper_neon.c: At top level:
lib/ector/software/ector_drawhelper_neon.c:103:1: warning: 'comp_func_source_over_sse2' defined but not used [-Wunused-function]
 comp_func_source_over_sse2(uint * __restrict dest, const uint * __restrict src, int length, uint color, uint const_alpha)
 ^
make[4]: *** [lib/ector/software/lib_ector_libector_la-ector_drawhelper_neon.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Comment 1 Csaba Osztrogonác 2015-11-12 05:22:30 PST
I disabled NEON to fix the build - http://trac.webkit.org/changeset/192360.
But it would be great to fix this build issue in upstream EFL.
Comment 2 Csaba Osztrogonác 2015-11-12 05:42:10 PST
Maybe the following patch fixes this issue:

diff --git a/src/lib/ector/software/ector_drawhelper_private.h b/src/lib/ector/software/ector_drawhelper_private.h
index d15a8f6..d62830a 100644
--- a/src/lib/ector/software/ector_drawhelper_private.h
+++ b/src/lib/ector/software/ector_drawhelper_private.h
@@ -11,6 +11,10 @@
 #define MAX( a, b )  ( (a) > (b) ? (a) : (b) )
 #endif
 
+#ifndef DATA32
+typedef unsigned int DATA32;
+#endif
+
 #ifndef uint
 typedef unsigned int uint;
 #endif



I'll try it later and will submit if it is enough.
Comment 3 Csaba Osztrogonác 2015-11-16 05:44:00 PST
Created attachment 265585 [details]
Patch

This patch fixes the EFL NEON build for me, but I'm not sure if it is functionally right or not. I let EFL maintainers to fix this bug themself - https://phab.enlightenment.org/T2851 .
Comment 4 Csaba Osztrogonác 2015-11-17 05:12:01 PST
(In reply to comment #3)
> Created attachment 265585 [details]
> Patch
> 
> This patch fixes the EFL NEON build for me, but I'm not sure if it is
> functionally right or not. I let EFL maintainers to fix this bug themself -
> https://phab.enlightenment.org/T2851 .

NEON build was disabled in ector, so we can enable NEON again 
once 1.16.1 is released or we can add the patch to jhbuild.
Comment 5 Csaba Osztrogonác 2016-01-15 06:21:30 PST
We already use 1.16.1 since https://trac.webkit.org/changeset/194571 (bug152688)
(and 1.17 is coming soon)