gallivm: disable NEON instructions if they are not supported
authorLubomir Rintel <lkundrak@v3.sk>
Mon, 11 Mar 2019 20:18:48 +0000 (21:18 +0100)
committerMatt Turner <mattst88@gmail.com>
Mon, 22 Apr 2019 16:47:49 +0000 (09:47 -0700)
The LLVM project made some questionable decisions about defaults for
armv7 (e.g. they enable NEON that is not there on NVIDIA and Marvell
platforms).

On top of that, getHostCPUFeatures() doesn't disable missing machine
attributes. Finally, -neon alone is not sufficient to disable emmision
of NEON instructions.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp

index f3b5784fce75d8e796277507e76000146c390237..f307c26d4f7429204687b95adc68a619cb9d5a40 100644 (file)
@@ -625,6 +625,13 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
    MAttrs.push_back("-avx512vl");
 #endif
 #endif
+#if defined(PIPE_ARCH_ARM)
+   if (!util_cpu_caps.has_neon) {
+      MAttrs.push_back("-neon");
+      MAttrs.push_back("-crypto");
+      MAttrs.push_back("-vfp2");
+   }
+#endif
 
 #if defined(PIPE_ARCH_PPC)
    MAttrs.push_back(util_cpu_caps.has_altivec ? "+altivec" : "-altivec");