PR #23331 opened by mkver URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23331 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23331.patch
Possible with checkasm_set_func_variant(). Signed-off-by: Andreas Rheinhardt <[email protected]> >From 07534aba2a578e86f4ce17401215765e6d1f8aa5 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Thu, 4 Jun 2026 14:18:52 +0200 Subject: [PATCH] tests/checkasm/hpeldsp: Also test non-bitexact functions Possible with checkasm_set_func_variant(). Signed-off-by: Andreas Rheinhardt <[email protected]> --- tests/checkasm/hpeldsp.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tests/checkasm/hpeldsp.c b/tests/checkasm/hpeldsp.c index bf44a666ca..ed074faee5 100644 --- a/tests/checkasm/hpeldsp.c +++ b/tests/checkasm/hpeldsp.c @@ -19,6 +19,9 @@ #include <assert.h> #include <stddef.h> +#include <checkasm/checkasm.h> +#include <checkasm/test.h> + #include "checkasm.h" #include "libavutil/intreadwrite.h" #include "libavutil/macros.h" @@ -57,7 +60,7 @@ void checkasm_check_hpeldsp(void) DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, srcbuf1)[INPUT_BUF_SIZE]; DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, dstbuf0)[BUF_SIZE]; DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, dstbuf1)[BUF_SIZE]; - HpelDSPContext hdsp; + HpelDSPContext hdsp[2]; static const struct { const char *name; size_t offset; @@ -71,17 +74,26 @@ void checkasm_check_hpeldsp(void) }; declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h); - ff_hpeldsp_init(&hdsp, AV_CODEC_FLAG_BITEXACT); + ff_hpeldsp_init(hdsp, AV_CODEC_FLAG_BITEXACT); + ff_hpeldsp_init(hdsp + 1, 0); for (size_t i = 0; i < FF_ARRAY_ELEMS(tests); ++i) { - op_pixels_func (*func_tab)[4] = (op_pixels_func (*)[4])((char*)&hdsp + tests[i].offset); + op_pixels_func (*func_tab)[4] = (op_pixels_func (*)[4])((char*)hdsp + tests[i].offset); + op_pixels_func (*func_tab2)[4] = (op_pixels_func (*)[4])((char*)&hdsp[1] + tests[i].offset); for (unsigned j = 0; j < tests[i].nb_blocksizes; ++j) { const unsigned blocksize = MAX_BLOCK_SIZE >> j; // h must always be a multiple of four, except when width is two or four. const unsigned h_mult = blocksize <= 4 ? 2 : 4; for (unsigned dxy = 0; dxy < 4; ++dxy) { - if (check_func(func_tab[j][dxy], "%s[%u][%u]", tests[i].name, j, dxy)) { + for (int approx = 0; approx < 2; ++approx) { + if (approx) { + checkasm_set_func_variant("approx_%s", checkasm_get_cpu_suffix()); + if (!check_func(func_tab2[j][dxy], "%s[%u][%u]", tests[i].name, j, dxy)) + continue; + } else if (!check_func(func_tab[j][dxy], "%s[%u][%u]", tests[i].name, j, dxy)) + continue; + // Don't always use output that is 16-aligned. size_t dst_offset = (rnd() % (MAX_BLOCK_SIZE / blocksize)) * blocksize; size_t src_offset = rnd() % MAX_BLOCK_SIZE; @@ -111,7 +123,14 @@ void checkasm_check_hpeldsp(void) randomize_buffers(dstbuf0, dstbuf1); call_ref(dst0, src0, stride, h); call_new(dst1, src1, stride, h); - if (memcmp(srcbuf0, srcbuf1, sizeof(srcbuf0)) || memcmp(dstbuf0, dstbuf1, sizeof(dstbuf0))) + if (memcmp(srcbuf0, srcbuf1, sizeof(srcbuf0))) + fail(); + if (approx) { + for (size_t k = 0; k < FF_ARRAY_ELEMS(dstbuf1); ++k) { + if (abs(dstbuf0[k] - dstbuf1[k]) > 1) + fail(); + } + } else if (memcmp(dstbuf0, dstbuf1, sizeof(dstbuf0))) fail(); bench_new(dst0, src0, stride, h); } -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
