On Mon, Aug 19, 2019 at 05:15:00PM +0300, Ard Biesheuvel wrote:
> When building the new aegis128 NEON code in big endian mode, Clang
> complains about the const uint8x16_t permute vectors in the following
> way:
>
> crypto/aegis128-neon-inner.c:58:40: warning: vector initializers are not
> compatible with NEON intrinsics in big endian mode
> [-Wnonportable-vector-initialization]
> static const uint8x16_t shift_rows = {
> ^
> crypto/aegis128-neon-inner.c:58:40: note: consider using vld1q_u8() to
> initialize a vector from memory, or vcombine_u8(vcreate_u8(),
> vcreate_u8())
> to initialize from integer constants
>
> Since the same issue applies to the uint8x16x4_t loads of the AES Sbox,
> update those references as well. However, since GCC does not implement
> the vld1q_u8_x4() intrinsic, switch from IS_ENABLED() to a preprocessor
> conditional to conditionally include this code.
>
> Reported-by: Nathan Chancellor <[email protected]>
> Signed-off-by: Ard Biesheuvel <[email protected]>
I am not familiar enough with vectors and such to confidently give a
review but I can say this fixes the warning and doesn't introduce any
new ones. Thank you for the fix!
Tested-by: Nathan Chancellor <[email protected]>