From 980b708e2c55a17e83c2f16c385f7be6c2bb4ab4 Mon Sep 17 00:00:00 2001 From: James Zern Date: Thu, 27 Feb 2025 17:41:03 -0800 Subject: [PATCH] enc_neon: fix build w/aarch64 gcc < 9.4.0 vld1q_u8_x4 was added for aarch64 in the gcc 9.4.0 release: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/ChangeLog;h=7558c0a369ea8c74a2b9369049a2d1cc187dc050;hb=13c83c4cc679ad5383ed57f359e53e8d518b7842#l2100 fixes: src/dsp/enc_neon.c: In function 'Intra4Preds_NEON': src/dsp/enc_neon.c:974:37: warning: implicit declaration of function 'vld1q_u8_x4'; did you mean 'vld1q_u8_x2'? [-Wimplicit-function-declaration] Bug: webp:398288323 Change-Id: Ic6e408065a375c945cc8691bd16a9f5d5642cfa2 --- src/dsp/enc_neon.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/dsp/enc_neon.c b/src/dsp/enc_neon.c index b373245d..c1c0a696 100644 --- a/src/dsp/enc_neon.c +++ b/src/dsp/enc_neon.c @@ -945,6 +945,18 @@ static int Quantize2Blocks_NEON(int16_t in[32], int16_t out[32], vst1q_u8(dst, r); \ } while (0) +static WEBP_INLINE uint8x16x4_t Vld1qU8x4(const uint8_t* ptr) { +#if LOCAL_GCC_PREREQ(9, 4) + return vld1q_u8_x4(ptr); +#else + uint8x16x4_t res; + INIT_VECTOR4(res, + vld1q_u8(ptr + 0 * 16), vld1q_u8(ptr + 1 * 16), + vld1q_u8(ptr + 2 * 16), vld1q_u8(ptr + 3 * 16)); + return res; +#endif +} + static void Intra4Preds_NEON(uint8_t* WEBP_RESTRICT dst, const uint8_t* WEBP_RESTRICT top) { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 @@ -971,9 +983,9 @@ static void Intra4Preds_NEON(uint8_t* WEBP_RESTRICT dst, 30, 30, 30, 30, 0, 0, 0, 0, 21, 22, 23, 24, 16, 16, 16, 16 }; - const uint8x16x4_t lookup_avgs1 = vld1q_u8_x4(kLookupTbl1); - const uint8x16x4_t lookup_avgs2 = vld1q_u8_x4(kLookupTbl2); - const uint8x16x4_t lookup_avgs3 = vld1q_u8_x4(kLookupTbl3); + const uint8x16x4_t lookup_avgs1 = Vld1qU8x4(kLookupTbl1); + const uint8x16x4_t lookup_avgs2 = Vld1qU8x4(kLookupTbl2); + const uint8x16x4_t lookup_avgs3 = Vld1qU8x4(kLookupTbl3); const uint8x16_t preload = vld1q_u8(top - 5); uint8x16x2_t qcombined;