Details
-
Bug
-
Resolution: Out of scope
-
P1: Critical
-
None
-
5.12.0 RC2
-
None
Description
2018.1.4 compiler sets _ARM_NEON and __ARM_NEON_ on for both 32bit and 64bit arm compilation.
Unfortunately Neon instruction support is not working like Qt expects and is only meant for auto-vectorization - compiler optimization (see: Multi help). In Qt we have hand written Neon optimizations for which e.g. the 64bit version of the compiler doesn't understand register names that start with "v" (the neon registers). This leads to compilation fails on every .S and inline asm we have with neon code in it.
To workaround this issue:
32bit compiler
You can simply add --no_neon to QMAKE_CXX and QMAKE_CC in mkspec/common/ghs-integrity-armv7.conf .
64bit compiler
The no_neon - option doesn't work as you will be greeted by: "cxintarm64: Warning: Option "--no_neon" ignored with processor=arm64".
1. Open the cxintarm64 binary in hex editor
2. Search for ARM_NEON
3. Replace the E in NEON so it reads NOON
4. Save the binary, it doesn't have CRC. compile away.
Alternatively if you don't want to touch the compiler binary you could remove subarch string "neon" from arch.cpp (removes .pri/.pro file NEON - files) and then search for every occurence of the _ARM_NEON_ and either try to undef it or replace it with #if 0 .
2017.1.4 compiler doesn't have this issue so you can use the old one as well.
Another smaller issue is that the assembler doesn't recognize c-style comments in .S -files which can be fixed with option -preprocess_assembly_files .