[PR] avcodec/fmtconvert: Remove int32_to_float_fmul_array8 (PR #24011)
mkver via ffmpeg-devel <[email protected]> Tue, 04 Aug 2026 18:51:27 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178586948778.59.7434290519058668978@29965ddac10e> |
PR #24011 opened by mkver URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24011 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24011.patch Unused since aebf07075f4244caf591a3af71e5872fe314e87b. >From 482e4717298a20965756926f33111d7a57832838 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 20:47:22 +0200 Subject: [PATCH] avcodec/fmtconvert: Remove int32_to_float_fmul_array8 Unused since aebf07075f4244caf591a3af71e5872fe314e87b. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavcodec/aarch64/fmtconvert_init.c | 4 - libavcodec/aarch64/fmtconvert_neon.S | 33 ------ libavcodec/arm/fmtconvert_init_arm.c | 8 -- libavcodec/arm/fmtconvert_neon.S | 36 ------ libavcodec/arm/fmtconvert_vfp.S | 161 --------------------------- libavcodec/fmtconvert.c | 10 -- libavcodec/fmtconvert.h | 17 --- libavcodec/riscv/fmtconvert_init.c | 4 - libavcodec/riscv/fmtconvert_rvv.S | 29 ----- libavcodec/x86/fmtconvert.asm | 28 ----- libavcodec/x86/fmtconvert_init.c | 3 - tests/checkasm/fmtconvert.c | 22 ---- 12 files changed, 355 deletions(-) diff --git a/libavcodec/aarch64/fmtconvert_init.c b/libavcodec/aarch64/fmtconvert_init.c index e0990afabc..0a8e625edc 100644 --- a/libavcodec/aarch64/fmtconvert_init.c +++ b/libavcodec/aarch64/fmtconvert_init.c @@ -24,9 +24,6 @@ #include "libavutil/aarch64/cpu.h" #include "libavcodec/fmtconvert.h" -void ff_int32_to_float_fmul_array8_neon(FmtConvertContext *c, float *dst, - const int32_t *src, const float *mul, - int len); void ff_int32_to_float_fmul_scalar_neon(float *dst, const int32_t *src, float mul, int len); @@ -35,7 +32,6 @@ av_cold void ff_fmt_convert_init_aarch64(FmtConvertContext *c) int cpu_flags = av_get_cpu_flags(); if (have_neon(cpu_flags)) { - c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_neon; c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon; } } diff --git a/libavcodec/aarch64/fmtconvert_neon.S b/libavcodec/aarch64/fmtconvert_neon.S index 2161c3a8ae..65d6325c9a 100644 --- a/libavcodec/aarch64/fmtconvert_neon.S +++ b/libavcodec/aarch64/fmtconvert_neon.S @@ -41,36 +41,3 @@ function ff_int32_to_float_fmul_scalar_neon, export=1 st1 {v3.4s,v4.4s}, [x0] ret endfunc - -function ff_int32_to_float_fmul_array8_neon, export=1 - lsr w4, w4, #3 - subs w5, w4, #1 - b.eq 1f -2: - ld1 {v0.4s,v1.4s}, [x2], #32 - ld1 {v2.4s,v3.4s}, [x2], #32 - scvtf v0.4s, v0.4s - scvtf v1.4s, v1.4s - ld1 {v16.2s}, [x3], #8 - scvtf v2.4s, v2.4s - scvtf v3.4s, v3.4s - fmul v4.4s, v0.4s, v16.s[0] - fmul v5.4s, v1.4s, v16.s[0] - fmul v6.4s, v2.4s, v16.s[1] - fmul v7.4s, v3.4s, v16.s[1] - st1 {v4.4s,v5.4s}, [x1], #32 - st1 {v6.4s,v7.4s}, [x1], #32 - subs w5, w5, #2 - b.gt 2b - b.eq 1f - ret -1: - ld1 {v0.4s,v1.4s}, [x2] - ld1 {v16.s}[0], [x3] - scvtf v0.4s, v0.4s - scvtf v1.4s, v1.4s - fmul v4.4s, v0.4s, v16.s[0] - fmul v5.4s, v1.4s, v16.s[0] - st1 {v4.4s,v5.4s}, [x1] - ret -endfunc diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c index e12f83c842..e38e0ee420 100644 --- a/libavcodec/arm/fmtconvert_init_arm.c +++ b/libavcodec/arm/fmtconvert_init_arm.c @@ -24,17 +24,11 @@ #include "libavutil/arm/cpu.h" #include "libavcodec/fmtconvert.h" -void ff_int32_to_float_fmul_array8_neon(FmtConvertContext *c, float *dst, - const int32_t *src, const float *mul, - int len); void ff_int32_to_float_fmul_scalar_neon(float *dst, const int32_t *src, float mul, int len); void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int32_t *src, float mul, int len); -void ff_int32_to_float_fmul_array8_vfp(FmtConvertContext *c, float *dst, - const int32_t *src, const float *mul, - int len); av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c) { @@ -42,11 +36,9 @@ av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c) if (have_vfp_vm(cpu_flags)) { c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp; - c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_vfp; } if (have_neon(cpu_flags)) { - c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_neon; c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon; } } diff --git a/libavcodec/arm/fmtconvert_neon.S b/libavcodec/arm/fmtconvert_neon.S index 738953e8fc..e0a01876d2 100644 --- a/libavcodec/arm/fmtconvert_neon.S +++ b/libavcodec/arm/fmtconvert_neon.S @@ -50,39 +50,3 @@ NOVFP len .req r3 bx lr .unreq len endfunc - -function ff_int32_to_float_fmul_array8_neon, export=1 - ldr r0, [sp] - lsr r0, r0, #3 - subs r0, r0, #1 - beq 1f -2: - vld1.32 {q0-q1}, [r2,:128]! - vld1.32 {q2-q3}, [r2,:128]! - vld1.32 {d20}, [r3]! - subs r0, r0, #2 - vcvt.f32.s32 q0, q0 - vcvt.f32.s32 q1, q1 - vdup.32 q8, d20[0] - vcvt.f32.s32 q2, q2 - vcvt.f32.s32 q3, q3 - vmul.f32 q0, q0, q8 - vdup.32 q9, d20[1] - vmul.f32 q1, q1, q8 - vmul.f32 q2, q2, q9 - vmul.f32 q3, q3, q9 - vst1.32 {q0-q1}, [r1,:128]! - vst1.32 {q2-q3}, [r1,:128]! - bgt 2b - it lt - bxlt lr -1: - vld1.32 {q0-q1}, [r2,:128] - vld1.32 {d16[],d17[]}, [r3] - vcvt.f32.s32 q0, q0 - vcvt.f32.s32 q1, q1 - vmul.f32 q0, q0, q8 - vmul.f32 q1, q1, q8 - vst1.32 {q0-q1}, [r1,:128] - bx lr -endfunc diff --git a/libavcodec/arm/fmtconvert_vfp.S b/libavcodec/arm/fmtconvert_vfp.S index 404cae7149..50d389783d 100644 --- a/libavcodec/arm/fmtconvert_vfp.S +++ b/libavcodec/arm/fmtconvert_vfp.S @@ -21,167 +21,6 @@ #include "config.h" #include "libavutil/arm/asm.S" -/** - * ARM VFP optimised int32 to float conversion. - * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned - * (16 bytes alignment is best for BCM2835), little-endian. - */ -@ void ff_int32_to_float_fmul_array8_vfp(FmtConvertContext *c, float *dst, const int32_t *src, const float *mul, int len) -function ff_int32_to_float_fmul_array8_vfp, export=1 - push {lr} - ldr a1, [sp, #4] - subs lr, a1, #3*8 - bcc 50f @ too short to pipeline - @ Now need to find (len / 8) % 3. The approximation - @ x / 24 = (x * 0xAB) >> 12 - @ is good for x < 4096, which is true for both AC3 and DCA. - mov a1, #0xAB - ldr ip, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 - mul a1, lr, a1 - vpush {s16-s31} - mov a1, a1, lsr #12 - add a1, a1, a1, lsl #1 - rsb a1, a1, lr, lsr #3 - cmp a1, #1 - fmrx a1, FPSCR - fmxr FPSCR, ip - beq 11f - blo 10f - @ Array is (2 + multiple of 3) x 8 floats long - @ drop through... - vldmia a3!, {s16-s23} - vldmia a4!, {s2,s3} - vldmia a3!, {s24-s31} - vcvt.f32.s32 s16, s16 - vcvt.f32.s32 s17, s17 - vcvt.f32.s32 s18, s18 - vcvt.f32.s32 s19, s19 - vcvt.f32.s32 s20, s20 - vcvt.f32.s32 s21, s21 - vcvt.f32.s32 s22, s22 - vcvt.f32.s32 s23, s23 - vmul.f32 s16, s16, s2 - @ drop through... -3: - vldmia a3!, {s8-s15} - vldmia a4!, {s1} - vcvt.f32.s32 s24, s24 - vcvt.f32.s32 s25, s25 - vcvt.f32.s32 s26, s26 - vcvt.f32.s32 s27, s27 - vcvt.f32.s32 s28, s28 - vcvt.f32.s32 s29, s29 - vcvt.f32.s32 s30, s30 - vcvt.f32.s32 s31, s31 - vmul.f32 s24, s24, s3 - vstmia a2!, {s16-s19} - vstmia a2!, {s20-s23} -2: - vldmia a3!, {s16-s23} - vldmia a4!, {s2} - vcvt.f32.s32 s8, s8 - vcvt.f32.s32 s9, s9 - vcvt.f32.s32 s10, s10 - vcvt.f32.s32 s11, s11 - vcvt.f32.s32 s12, s12 - vcvt.f32.s32 s13, s13 - vcvt.f32.s32 s14, s14 - vcvt.f32.s32 s15, s15 - vmul.f32 s8, s8, s1 - vstmia a2!, {s24-s27} - vstmia a2!, {s28-s31} -1: - vldmia a3!, {s24-s31} - vldmia a4!, {s3} - vcvt.f32.s32 s16, s16 - vcvt.f32.s32 s17, s17 - vcvt.f32.s32 s18, s18 - vcvt.f32.s32 s19, s19 - vcvt.f32.s32 s20, s20 - vcvt.f32.s32 s21, s21 - vcvt.f32.s32 s22, s22 - vcvt.f32.s32 s23, s23 - vmul.f32 s16, s16, s2 - vstmia a2!, {s8-s11} - vstmia a2!, {s12-s15} - - subs lr, lr, #8*3 - bpl 3b - - vcvt.f32.s32 s24, s24 - vcvt.f32.s32 s25, s25 - vcvt.f32.s32 s26, s26 - vcvt.f32.s32 s27, s27 - vcvt.f32.s32 s28, s28 - vcvt.f32.s32 s29, s29 - vcvt.f32.s32 s30, s30 - vcvt.f32.s32 s31, s31 - vmul.f32 s24, s24, s3 - vstmia a2!, {s16-s19} - vstmia a2!, {s20-s23} - vstmia a2!, {s24-s27} - vstmia a2!, {s28-s31} - - fmxr FPSCR, a1 - vpop {s16-s31} - pop {pc} - -10: @ Array is (multiple of 3) x 8 floats long - vldmia a3!, {s8-s15} - vldmia a4!, {s1,s2} - vldmia a3!, {s16-s23} - vcvt.f32.s32 s8, s8 - vcvt.f32.s32 s9, s9 - vcvt.f32.s32 s10, s10 - vcvt.f32.s32 s11, s11 - vcvt.f32.s32 s12, s12 - vcvt.f32.s32 s13, s13 - vcvt.f32.s32 s14, s14 - vcvt.f32.s32 s15, s15 - vmul.f32 s8, s8, s1 - b 1b - -11: @ Array is (1 + multiple of 3) x 8 floats long - vldmia a3!, {s24-s31} - vldmia a4!, {s3} - vldmia a3!, {s8-s15} - vldmia a4!, {s1} - vcvt.f32.s32 s24, s24 - vcvt.f32.s32 s25, s25 - vcvt.f32.s32 s26, s26 - vcvt.f32.s32 s27, s27 - vcvt.f32.s32 s28, s28 - vcvt.f32.s32 s29, s29 - vcvt.f32.s32 s30, s30 - vcvt.f32.s32 s31, s31 - vmul.f32 s24, s24, s3 - b 2b - -50: - ldr lr, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 - fmrx ip, FPSCR - fmxr FPSCR, lr -51: - vldmia a3!, {s8-s15} - vldmia a4!, {s0} - vcvt.f32.s32 s8, s8 - vcvt.f32.s32 s9, s9 - vcvt.f32.s32 s10, s10 - vcvt.f32.s32 s11, s11 - vcvt.f32.s32 s12, s12 - vcvt.f32.s32 s13, s13 - vcvt.f32.s32 s14, s14 - vcvt.f32.s32 s15, s15 - vmul.f32 s8, s8, s0 - subs a1, a1, #8 - vstmia a2!, {s8-s11} - vstmia a2!, {s12-s15} - bne 51b - - fmxr FPSCR, ip - pop {pc} -endfunc - /** * ARM VFP optimised int32 to float conversion. * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned diff --git a/libavcodec/fmtconvert.c b/libavcodec/fmtconvert.c index 77d69f8211..e74daed1d3 100644 --- a/libavcodec/fmtconvert.c +++ b/libavcodec/fmtconvert.c @@ -32,19 +32,9 @@ static void int32_to_float_fmul_scalar_c(float *dst, const int32_t *src, dst[i] = src[i] * mul; } -static void int32_to_float_fmul_array8_c(FmtConvertContext *c, float *dst, - const int32_t *src, const float *mul, - int len) -{ - int i; - for (i = 0; i < len; i += 8) - c->int32_to_float_fmul_scalar(&dst[i], &src[i], *mul++, 8); -} - av_cold void ff_fmt_convert_init(FmtConvertContext *c) { c->int32_to_float_fmul_scalar = int32_to_float_fmul_scalar_c; - c->int32_to_float_fmul_array8 = int32_to_float_fmul_array8_c; #if ARCH_AARCH64 ff_fmt_convert_init_aarch64(c); diff --git a/libavcodec/fmtconvert.h b/libavcodec/fmtconvert.h index 1cb4628a64..912d88a68f 100644 --- a/libavcodec/fmtconvert.h +++ b/libavcodec/fmtconvert.h @@ -37,23 +37,6 @@ typedef struct FmtConvertContext { */ void (*int32_to_float_fmul_scalar)(float *dst, const int32_t *src, float mul, int len); - - /** - * Convert an array of int32_t to float and multiply by a float value from another array, - * stepping along the float array once for each 8 integers. - * @param c pointer to FmtConvertContext. - * @param dst destination array of float. - * constraints: 16-byte aligned - * @param src source array of int32_t. - * constraints: 16-byte aligned - * @param mul source array of float multipliers. - * @param len number of elements to convert. - * constraints: multiple of 8 - */ - void (*int32_to_float_fmul_array8)(struct FmtConvertContext *c, - float *dst, const int32_t *src, - const float *mul, int len); - } FmtConvertContext; void ff_fmt_convert_init(FmtConvertContext *c); diff --git a/libavcodec/riscv/fmtconvert_init.c b/libavcodec/riscv/fmtconvert_init.c index 4d3f0f6464..957be0ad2c 100644 --- a/libavcodec/riscv/fmtconvert_init.c +++ b/libavcodec/riscv/fmtconvert_init.c @@ -27,9 +27,6 @@ void ff_int32_to_float_fmul_scalar_rvv(float *dst, const int32_t *src, float mul, int len); -void ff_int32_to_float_fmul_array8_rvv(FmtConvertContext *c, float *dst, - const int32_t *src, const float *mul, - int len); av_cold void ff_fmt_convert_init_riscv(FmtConvertContext *c) { @@ -38,7 +35,6 @@ av_cold void ff_fmt_convert_init_riscv(FmtConvertContext *c) if ((flags & AV_CPU_FLAG_RVV_F32) && (flags & AV_CPU_FLAG_RVB)) { c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_rvv; - c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_rvv; } #endif } diff --git a/libavcodec/riscv/fmtconvert_rvv.S b/libavcodec/riscv/fmtconvert_rvv.S index cedeab4e5b..e9b519c861 100644 --- a/libavcodec/riscv/fmtconvert_rvv.S +++ b/libavcodec/riscv/fmtconvert_rvv.S @@ -37,32 +37,3 @@ NOHWF mv a2, a3 ret endfunc - -func ff_int32_to_float_fmul_array8_rvv, zve32f, zba - lpad 0 - srai a4, a4, 3 - -1: vsetvli t0, a4, e32, m1, ta, ma - vle32.v v24, (a3) - slli t2, t0, 2 + 3 - vlseg8e32.v v16, (a2) - vsetvli t3, zero, e32, m8, ta, ma - vfcvt.f.x.v v16, v16 - vsetvli zero, a4, e32, m1, ta, ma - vfmul.vv v16, v16, v24 - sub a4, a4, t0 - vfmul.vv v17, v17, v24 - sh2add a3, t0, a3 - vfmul.vv v18, v18, v24 - add a2, a2, t2 - vfmul.vv v19, v19, v24 - vfmul.vv v20, v20, v24 - vfmul.vv v21, v21, v24 - vfmul.vv v22, v22, v24 - vfmul.vv v23, v23, v24 - vsseg8e32.v v16, (a1) - add a1, a1, t2 - bnez a4, 1b - - ret -endfunc diff --git a/libavcodec/x86/fmtconvert.asm b/libavcodec/x86/fmtconvert.asm index 99c5efeab0..65d7b5bcbc 100644 --- a/libavcodec/x86/fmtconvert.asm +++ b/libavcodec/x86/fmtconvert.asm @@ -57,31 +57,3 @@ cglobal int32_to_float_fmul_scalar, 4, 4, %1, dst, src, mul, len INIT_XMM sse2 INT32_TO_FLOAT_FMUL_SCALAR 3 - -;------------------------------------------------------------------------------ -; void ff_int32_to_float_fmul_array8(FmtConvertContext *c, float *dst, const int32_t *src, -; const float *mul, int len); -;------------------------------------------------------------------------------ -%macro INT32_TO_FLOAT_FMUL_ARRAY8 0 -cglobal int32_to_float_fmul_array8, 5, 5, 5, c, dst, src, mul, len - shl lend, 2 - add srcq, lenq - add dstq, lenq - neg lenq -.loop: - movss m0, [mulq] - SPLATD m0 - cvtdq2ps m1, [srcq+lenq ] - cvtdq2ps m2, [srcq+lenq+16] - mulps m1, m0 - mulps m2, m0 - mova [dstq+lenq ], m1 - mova [dstq+lenq+16], m2 - add mulq, 4 - add lenq, 32 - jl .loop - RET -%endmacro - -INIT_XMM sse2 -INT32_TO_FLOAT_FMUL_ARRAY8 diff --git a/libavcodec/x86/fmtconvert_init.c b/libavcodec/x86/fmtconvert_init.c index 6cf3a807a6..3f8a5bd795 100644 --- a/libavcodec/x86/fmtconvert_init.c +++ b/libavcodec/x86/fmtconvert_init.c @@ -28,8 +28,6 @@ #include "libavcodec/fmtconvert.h" void ff_int32_to_float_fmul_scalar_sse2(float *dst, const int32_t *src, float mul, int len); -void ff_int32_to_float_fmul_array8_sse2(FmtConvertContext *c, float *dst, const int32_t *src, - const float *mul, int len); av_cold void ff_fmt_convert_init_x86(FmtConvertContext *c) { @@ -37,6 +35,5 @@ av_cold void ff_fmt_convert_init_x86(FmtConvertContext *c) if (EXTERNAL_SSE2(cpu_flags)) { c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_sse2; - c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_sse2; } } diff --git a/tests/checkasm/fmtconvert.c b/tests/checkasm/fmtconvert.c index e103a664d0..1f157faf8c 100644 --- a/tests/checkasm/fmtconvert.c +++ b/tests/checkasm/fmtconvert.c @@ -81,27 +81,5 @@ void checkasm_check_fmtconvert(void) } } } - if (check_func(c.int32_to_float_fmul_array8, "int32_to_float_fmul_array8")) { - declare_func(void, FmtConvertContext *, float *, const int32_t *, - const float *, int); - - for (i = 0; i < 4; i++) { - for (j = 0; j < FF_ARRAY_ELEMS(length); j++) { - - randomize_input(length[j]); - - call_ref(&c, dst0, in, scale_arr, length[j]); - call_new(&c, dst1, in, scale_arr, length[j]); - - if (!float_near_ulp_array(dst0, dst1, 3, length[j])) { - fail(); - fprintf(stderr, "int32_to_float_fmul_array8: len: %d\n", length[j]); - break; - } - - bench_new(&c, dst1, in, scale_arr, length[j]); - } - } - } report("fmtconvert"); } -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]