Re: [linux-stable-rc:linux-5.15.y 6874/8723] arch/arm/lib/xor-neon.c:30:2: warning: This code requires at least version 4.6 of GCC

From: Ard Biesheuvel
Date: Mon Jul 25 2022 - 01:42:26 EST


On Mon, 25 Jul 2022 at 00:40, Jason A. Donenfeld <Jason@xxxxxxxxx> wrote:
>
> Hi Ard,
>
> On Mon, Jul 25, 2022 at 04:14:48AM +0800, kernel test robot wrote:
> > All warnings (new ones prefixed by >>):
> >
> > >> arch/arm/lib/xor-neon.c:30:2: warning: This code requires at least version 4.6 of GCC [-W#warnings]
> > #warning This code requires at least version 4.6 of GCC
> > ^
> > 1 warning generated.
> >
> >
> > vim +30 arch/arm/lib/xor-neon.c
> >
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 16
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 17 /*
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 18 * Pull in the reference implementations while instructing GCC (through
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 19 * -ftree-vectorize) to attempt to exploit implicit parallelism and emit
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 20 * NEON instructions.
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 21 */
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 22 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 23 #pragma GCC optimize "tree-vectorize"
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 24 #else
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 25 /*
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 26 * While older versions of GCC do not generate incorrect code, they fail to
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 27 * recognize the parallel nature of these functions, and emit plain ARM code,
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 28 * which is known to be slower than the optimized ARM code in asm-arm/xor.h.
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 29 */
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 @30 #warning This code requires at least version 4.6 of GCC
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 31 #endif
> > 01956597cbc46d Ard Biesheuvel 2013-05-17 32
>
> Does this file need a depends on ≥4.6 thing in Kconfig? Or is something
> else happening here since 4.6 isn't even supported by the kernel these
> days?
>

Hi Jason,

This is explained/fixed in

commit a69cb445f7d129abf7c50d48c8a8eca7c8d5df15
Author: Ard Biesheuvel <ardb@xxxxxxxxxx>
Date: Sat Feb 5 16:23:46 2022 +0100

crypto: arm/xor - make vectorized C code Clang-friendly

The ARM version of the accelerated XOR routines are simply the 8-way C
routines passed through the auto-vectorizer with SIMD codegen enabled.
This used to require GCC version 4.6 at least, but given that 5.1 is now
the baseline, this check is no longer necessary, and actually
misidentifies Clang as GCC < 4.6 as Clang defines the GCC major/minor as
well, but makes no attempt at doing this in a way that conveys feature
parity with a certain version of GCC (which would not be a great idea in
the first place).

which landed in v5.18. Note that the patch depends on its parent,
which touches many different architectures, so it may not be
backportable cleanly.