Bug 108586

Summary: Android build error with new tiled_memcopy_sse41 (32 bit build only)
Product: Mesa Reporter: Mauro Rossi <issor.oruam>
Component: Drivers/DRI/i965Assignee: Tapani Pälli <lemody>
Status: RESOLVED FIXED QA Contact: Intel 3D Bugs Mailing List <intel-3d-bugs>
Severity: blocker    
Priority: medium Keywords: bisected
Version: git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Mauro Rossi 2018-10-29 10:33:17 UTC
Hi,

in i965 mesa master branch after commit 11b1afdc92db9
("i965/tiled_memcpy: inline movntdqa loads in tiled_to_linear")

I'm getting the following build error only with 32 bit build x86 target builds,
what is strange the 64 bit build is fine, which comprises x86 targets on obj_x86, that is weird, so it may be related to composition

It may be related to the generic build/core/combo/arch/x86/x86.mk not having ARCH_X86_HAVE_SSE4_1 enabled.

Could you please check with Tapani Palli about the Android.mk used here,
as other sse41 libraries modules build rules and static linking are all braced by:

ifeq ($(ARCH_X86_HAVE_SSE4_1),true)
...
endef

Mauro


Building error with x86 build:

In file included from external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy_sse41.c:35:
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:574:21: warning: implicit declaration of function '_mm_stream_load_si128' is invalid in C99 [-Wimplicit-function-declaration]
      __m128i val = _mm_stream_load_si128((__m128i *)src);
                    ^
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:574:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
      __m128i val = _mm_stream_load_si128((__m128i *)src);
              ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:578:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
      __m128i val0 = _mm_stream_load_si128(((__m128i *)src) + 0);
              ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:579:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
      __m128i val1 = _mm_stream_load_si128(((__m128i *)src) + 1);
              ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:580:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
      __m128i val2 = _mm_stream_load_si128(((__m128i *)src) + 2);
              ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:581:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
      __m128i val3 = _mm_stream_load_si128(((__m128i *)src) + 3);
              ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning and 5 errors generated.
Comment 1 Mauro Rossi 2018-10-29 11:54:10 UTC
Correction: other sse41 libraries modules in Android build rules and static linking are all braced by:

ifeq ($(ARCH_X86_HAVE_SSE4_1),true)
...
endif

and not endef.


Mauro
Comment 2 Tapani Pälli 2018-10-30 12:47:55 UTC
Fix was pushed to master, thanks Mauro!

--- 8< ---
commit bfe0e3291302f4a8bf2f9b401a07f6d5ade19d15
Author: Mauro Rossi <issor.oruam@gmail.com>
Date:   Mon Oct 29 12:59:56 2018 +0100

    android: i965/tiled_memcpy: fix build for x86 generic target
    
    x86 32 bit generic target does not enable ARCH_X86_HAVE_SSE4_1
    for this reason all Android library modules using SSE4_1 in mesa
    are built conditionally to ARCH_X86_HAVE_SSE4_1
    
    The same approach is now applied to libmesa_intel_tiled_memcpy_sse41
    in order to avoid the following building errors:
    
    external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:574:15:
    error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
          __m128i val = _mm_stream_load_si128((__m128i *)src);
                  ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:578:15:
    error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
          __m128i val0 = _mm_stream_load_si128(((__m128i *)src) + 0);
                  ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:579:15:
    error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
          __m128i val1 = _mm_stream_load_si128(((__m128i *)src) + 1);
                  ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:580:15:
    error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
          __m128i val2 = _mm_stream_load_si128(((__m128i *)src) + 2);
                  ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/mesa/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c:581:15: error: initializing '__m128i' (vector of 2 'long long' values) with an expression of incompatible type 'int'
          __m128i val3 = _mm_stream_load_si128(((__m128i *)src) + 3);
                  ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    5 errors generated.
    
    Fixes: 11b1afdc92 ("i965/tiled_memcpy: inline movntdqa loads in tiled_to_linear")
    Signed-off-by: Mauro Rossi <issor.oruam@gmail.com>
    Reviewed-by: Tapani Pälli <tapani.palli@intel.com>

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.