broadcom/vc4: Build the vc4_tiling_lt_neon.c with -mfpu=neon on ARM.

If you don't pass this, the compiler refuses to compile the assembly for
pre-v7 CPUs.  This also keeps us from building identical, non-NEON code on
aarch64 and x86.

Fixes: a373f77662 ("vc4: Use a wrapper file to set VC4_BUILD_NEON instead of CFLAGS.")

v2: Fix Android build by just appending NEON_C_SOURCES when
    ARCH_ARM_HAVE_NEON.

Tested-by: Rob Herring <robh@kernel.org>
(cherry picked from commit bd5efbd70b)
[Emil Velikov: address libvc4_la_LIBADD conflicts]
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

Conflicts:
	src/gallium/drivers/vc4/Makefile.am
This commit is contained in:
Eric Anholt 2017-07-31 14:59:38 -07:00 committed by Emil Velikov
parent 833f12abdf
commit 93bd5fbfe1
4 changed files with 25 additions and 7 deletions

View file

@ -28,6 +28,10 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
$(C_SOURCES)
ifeq ($(ARCH_ARM_HAVE_NEON),true)
LOCAL_SRC_FILES += $(NEON_C_SOURCES)
endif
LOCAL_GENERATED_SOURCES := $(MESA_GEN_NIR_H)
LOCAL_C_INCLUDES := \
$(MESA_TOP)/include/drm-uapi

View file

@ -39,6 +39,14 @@ noinst_LTLIBRARIES = libvc4.la
libvc4_la_SOURCES = $(C_SOURCES)
libvc4_la_LIBADD = $(SIM_LIB)
if HAVE_ARM_ASM
noinst_LTLIBRARIES += libvc4_neon.la
libvc4_la_LIBADD += libvc4_neon.la
libvc4_neon_la_SOURCES = $(NEON_C_SOURCES)
libvc4_neon_la_CFLAGS = $(AM_CFLAGS) -mfpu=neon
endif
libvc4_la_LDFLAGS = $(SIM_LDFLAGS)
EXTRA_DIST = kernel/README

View file

@ -57,7 +57,8 @@ C_SOURCES := \
vc4_state.c \
vc4_tiling.c \
vc4_tiling_lt.c \
vc4_tiling_lt_neon.c \
vc4_tiling.h \
vc4_uniforms.c \
$()
NEON_C_SOURCES := vc4_tiling_lt_neon.c

View file

@ -89,13 +89,15 @@ vc4_load_lt_image(void *dst, uint32_t dst_stride,
void *src, uint32_t src_stride,
int cpp, const struct pipe_box *box)
{
#ifdef USE_ARM_ASM
if (util_cpu_caps.has_neon) {
vc4_load_lt_image_neon(dst, dst_stride, src, src_stride,
cpp, box);
} else {
vc4_load_lt_image_base(dst, dst_stride, src, src_stride,
cpp, box);
return;
}
#endif
vc4_load_lt_image_base(dst, dst_stride, src, src_stride,
cpp, box);
}
static inline void
@ -103,13 +105,16 @@ vc4_store_lt_image(void *dst, uint32_t dst_stride,
void *src, uint32_t src_stride,
int cpp, const struct pipe_box *box)
{
#ifdef USE_ARM_ASM
if (util_cpu_caps.has_neon) {
vc4_store_lt_image_neon(dst, dst_stride, src, src_stride,
cpp, box);
} else {
vc4_store_lt_image_base(dst, dst_stride, src, src_stride,
cpp, box);
return;
}
#endif
vc4_store_lt_image_base(dst, dst_stride, src, src_stride,
cpp, box);
}
#endif /* VC4_TILING_H */