|
| 1 | +From 3664d240c434969e6e460faa323704a4c579261e Mon Sep 17 00:00:00 2001 |
| 2 | +From: Alexandru Ardelean <alex@shruggie.ro> |
| 3 | +Date: Mon, 6 Jul 2026 12:15:25 +0300 |
| 4 | +Subject: [PATCH] audio-resampler: assemble NEON inner loops in ARM (A32) mode |
| 5 | + |
| 6 | +The NEON resampler asm rewritten in 1.28 computes strides with the UAL wide |
| 7 | +mnemonic add.w. OpenWrt builds ARM in A32 (non-Thumb) mode, where gas is in |
| 8 | +divided syntax and rejects it ("bad instruction `add.w`"), breaking the |
| 9 | +gst1-plugins-base build on every NEON target (e.g. cortex-a15). Upstream only |
| 10 | +builds ARM in Thumb mode so never hits this; 1.28.6 and main are still affected. |
| 11 | + |
| 12 | +Drop the .w suffix: plain add selects the identical 32-bit encoding in A32, and |
| 13 | +in Thumb-2 the high-register/shift operands force the wide encoding anyway, so |
| 14 | +the generated code is unchanged on both. Reported upstream. |
| 15 | + |
| 16 | +Signed-off-by: Alexandru Ardelean <alex@shruggie.ro> |
| 17 | +--- |
| 18 | + gst-libs/gst/audio/audio-resampler-neon.h | 36 +++++++++++------------ |
| 19 | + 1 file changed, 18 insertions(+), 18 deletions(-) |
| 20 | + |
| 21 | +--- a/gst-libs/gst/audio/audio-resampler-neon.h |
| 22 | ++++ b/gst-libs/gst/audio/audio-resampler-neon.h |
| 23 | +@@ -133,11 +133,11 @@ inner_product_gint16_cubic_1_neon (gint1 |
| 24 | + "1:" |
| 25 | + " mov r8, %[b]\n" |
| 26 | + " vld1.16 {d16, d17}, [%[b]]!\n" |
| 27 | +- " add.w r8, r8, %[bstride]\n" |
| 28 | ++ " add r8, r8, %[bstride]\n" |
| 29 | + " vld1.16 {d18, d19}, [r8]\n" |
| 30 | +- " add.w r8, r8, %[bstride]\n" |
| 31 | ++ " add r8, r8, %[bstride]\n" |
| 32 | + " vld1.16 {d20, d21}, [r8]\n" |
| 33 | +- " add.w r8, r8, %[bstride]\n" |
| 34 | ++ " add r8, r8, %[bstride]\n" |
| 35 | + " vld1.16 {d22, d23}, [r8]\n" |
| 36 | + " vld1.16 {d24, d25}, [%[a]]!\n" |
| 37 | + " subs %[len], %[len], #8\n" |
| 38 | +@@ -214,11 +214,11 @@ interpolate_gint16_cubic_neon (gpointer |
| 39 | + "1:" |
| 40 | + " mov r8, %[a]\n" |
| 41 | + " vld1.16 {d16, d17}, [%[a]]!\n" |
| 42 | +- " add.w r8, r8, %[astride]\n" |
| 43 | ++ " add r8, r8, %[astride]\n" |
| 44 | + " vld1.16 {d18, d19}, [r8]\n" |
| 45 | +- " add.w r8, r8, %[astride]\n" |
| 46 | ++ " add r8, r8, %[astride]\n" |
| 47 | + " vld1.16 {d20, d21}, [r8]\n" |
| 48 | +- " add.w r8, r8, %[astride]\n" |
| 49 | ++ " add r8, r8, %[astride]\n" |
| 50 | + " vld1.16 {d22, d23}, [r8]\n" |
| 51 | + " subs %[len], %[len], #8\n" |
| 52 | + " vmull.s16 q0, d16, d24\n" |
| 53 | +@@ -340,11 +340,11 @@ inner_product_gint32_cubic_1_neon (gint3 |
| 54 | + "1:" |
| 55 | + " mov r8, %[b]\n" |
| 56 | + " vld1.32 {d16, d17}, [%[b]]!\n" |
| 57 | +- " add.w r8, r8, %[bstride]\n" |
| 58 | ++ " add r8, r8, %[bstride]\n" |
| 59 | + " vld1.32 {d18, d19}, [r8]\n" |
| 60 | +- " add.w r8, r8, %[bstride]\n" |
| 61 | ++ " add r8, r8, %[bstride]\n" |
| 62 | + " vld1.32 {d20, d21}, [r8]\n" |
| 63 | +- " add.w r8, r8, %[bstride]\n" |
| 64 | ++ " add r8, r8, %[bstride]\n" |
| 65 | + " vld1.32 {d22, d23}, [r8]\n" |
| 66 | + " vld1.32 {d24, d25}, [%[a]]!\n" |
| 67 | + " subs %[len], %[len], #4\n" |
| 68 | +@@ -426,11 +426,11 @@ interpolate_gint32_cubic_neon (gpointer |
| 69 | + "1:" |
| 70 | + " mov r8, %[a]\n" |
| 71 | + " vld1.32 {d16, d17}, [%[a]]!\n" |
| 72 | +- " add.w r8, r8, %[astride]\n" |
| 73 | ++ " add r8, r8, %[astride]\n" |
| 74 | + " vld1.32 {d18, d19}, [r8]\n" |
| 75 | +- " add.w r8, r8, %[astride]\n" |
| 76 | ++ " add r8, r8, %[astride]\n" |
| 77 | + " vld1.32 {d20, d21}, [r8]\n" |
| 78 | +- " add.w r8, r8, %[astride]\n" |
| 79 | ++ " add r8, r8, %[astride]\n" |
| 80 | + " vld1.32 {d22, d23}, [r8]\n" |
| 81 | + " subs %[len], %[len], #4\n" |
| 82 | + " vmull.s32 q0, d16, d24\n" |
| 83 | +@@ -545,11 +545,11 @@ inner_product_gfloat_cubic_1_neon (gfloa |
| 84 | + "1:" |
| 85 | + " mov r8, %[b]\n" |
| 86 | + " vld1.32 {q8}, [%[b]]!\n" |
| 87 | +- " add.w r8, r8, %[bstride]\n" |
| 88 | ++ " add r8, r8, %[bstride]\n" |
| 89 | + " vld1.32 {q9}, [r8]\n" |
| 90 | +- " add.w r8, r8, %[bstride]\n" |
| 91 | ++ " add r8, r8, %[bstride]\n" |
| 92 | + " vld1.32 {q10}, [r8]\n" |
| 93 | +- " add.w r8, r8, %[bstride]\n" |
| 94 | ++ " add r8, r8, %[bstride]\n" |
| 95 | + " vld1.32 {q11}, [r8]\n" |
| 96 | + " vld1.32 {q12}, [%[a]]!\n" |
| 97 | + " subs %[len], %[len], #4\n" |
| 98 | +@@ -623,11 +623,11 @@ interpolate_gfloat_cubic_neon (gpointer |
| 99 | + "1:" |
| 100 | + " mov r8, %[a]\n" |
| 101 | + " vld1.32 {q8}, [%[a]]!\n" |
| 102 | +- " add.w r8, r8, %[astride]\n" |
| 103 | ++ " add r8, r8, %[astride]\n" |
| 104 | + " vld1.32 {q9}, [r8]\n" |
| 105 | +- " add.w r8, r8, %[astride]\n" |
| 106 | ++ " add r8, r8, %[astride]\n" |
| 107 | + " vld1.32 {q10}, [r8]\n" |
| 108 | +- " add.w r8, r8, %[astride]\n" |
| 109 | ++ " add r8, r8, %[astride]\n" |
| 110 | + " vld1.32 {q11}, [r8]\n" |
| 111 | + " subs %[len], %[len], #4\n" |
| 112 | + " vmul.f32 q0, q8, q12\n" |
0 commit comments