diff mbox series

[FFmpeg-devel,2/3] checkasm/svqenc: add ssd_int8_vs_int16 test

Message ID CAEa-L+ujt036A2BVsgzTOMQcbLGpHw9HWnPSgfC8+GLV9rVjzg@mail.gmail.com
State New
Headers show
Series [FFmpeg-devel,1/3] lvac/svqenc: add ff_svq1enc_init | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

flow gg Dec. 29, 2023, 11:57 a.m. UTC
Tests on x86 might fail, possibly due to a 16-bit sub overflow

Comments

Martin Storsjö Dec. 29, 2023, 12:16 p.m. UTC | #1
On Fri, 29 Dec 2023, flow gg wrote:

> Tests on x86 might fail, possibly due to a 16-bit sub overflow

If this only happens in checkasm but not in real life use, it means that 
the checkasm test input is out of range, and we should try to mimic the 
real input data.

If the issue is off-by-one due to rounding, we could allow it by making a 
comparison per element, and tolerate a certain diff (maybe only on x86).

But if it is an actual overflow on valid input data, the x86 asm 
definitely needs to be fixed, by someone... Worst case, we might want to 
disable that checkasm test on x86 temporarily.

// Martin
James Almer Dec. 29, 2023, 1:17 p.m. UTC | #2
On 12/29/2023 9:16 AM, Martin Storsjö wrote:
> On Fri, 29 Dec 2023, flow gg wrote:
> 
>> Tests on x86 might fail, possibly due to a 16-bit sub overflow
> 
> If this only happens in checkasm but not in real life use, it means that 
> the checkasm test input is out of range, and we should try to mimic the 
> real input data.
> 
> If the issue is off-by-one due to rounding, we could allow it by making 
> a comparison per element, and tolerate a certain diff (maybe only on x86).
> 
> But if it is an actual overflow on valid input data, the x86 asm 
> definitely needs to be fixed, by someone... Worst case, we might want to 
> disable that checkasm test on x86 temporarily.

The function subtracts an int16 from an int8, whose result may not fit 
on an int16. The x86 asm expects it to do, hence the failures.

I don't know if such cases exist in real world files, so like you said, 
if they don't then the test should generate in-range input. But if they 
do, i'll fix the x86 asm (sadly, this means sse4 will be required 
instead of sse2).
Martin Storsjö Dec. 29, 2023, 2:34 p.m. UTC | #3
On Fri, 29 Dec 2023, James Almer wrote:

> On 12/29/2023 9:16 AM, Martin Storsjö wrote:
>> On Fri, 29 Dec 2023, flow gg wrote:
>> 
>>> Tests on x86 might fail, possibly due to a 16-bit sub overflow
>> 
>> If this only happens in checkasm but not in real life use, it means 
> that 
>> the checkasm test input is out of range, and we should try to mimic the 
>> real input data.
>> 
>> If the issue is off-by-one due to rounding, we could allow it by making 
>> a comparison per element, and tolerate a certain diff (maybe only on 
> x86).
>> 
>> But if it is an actual overflow on valid input data, the x86 asm 
>> definitely needs to be fixed, by someone... Worst case, we might want 
> to 
>> disable that checkasm test on x86 temporarily.
>
> The function subtracts an int16 from an int8, whose result may not fit 
> on an int16. The x86 asm expects it to do, hence the failures.
>
> I don't know if such cases exist in real world files, so like you said, 
> if they don't then the test should generate in-range input. But if they 
> do, i'll fix the x86 asm (sadly, this means sse4 will be required 
> instead of sse2).

I think it's probably best to limit the checkasm inputs that don't 
overflow, for now.

// Martin
Rémi Denis-Courmont Dec. 30, 2023, 11:17 a.m. UTC | #4
Le 29 décembre 2023 12:57:01 GMT+01:00, flow gg <hlefthleft@gmail.com> a écrit :
>Tests on x86 might fail, possibly due to a 16-bit sub overflow

I don't know anything about the SVQ encoder. Still, especially for an encoder, overflows are probably not expected. So then it is as Martin wrote.
flow gg Dec. 30, 2023, 1:59 p.m. UTC | #5
Okay, it has been modified in this reply.

Martin Storsjö <martin@martin.st> 于2023年12月29日周五 22:35写道:

> On Fri, 29 Dec 2023, James Almer wrote:
>
> > On 12/29/2023 9:16 AM, Martin Storsjö wrote:
> >> On Fri, 29 Dec 2023, flow gg wrote:
> >>
> >>> Tests on x86 might fail, possibly due to a 16-bit sub overflow
> >>
> >> If this only happens in checkasm but not in real life use, it means
> > that
> >> the checkasm test input is out of range, and we should try to mimic the
> >> real input data.
> >>
> >> If the issue is off-by-one due to rounding, we could allow it by making
> >> a comparison per element, and tolerate a certain diff (maybe only on
> > x86).
> >>
> >> But if it is an actual overflow on valid input data, the x86 asm
> >> definitely needs to be fixed, by someone... Worst case, we might want
> > to
> >> disable that checkasm test on x86 temporarily.
> >
> > The function subtracts an int16 from an int8, whose result may not fit
> > on an int16. The x86 asm expects it to do, hence the failures.
> >
> > I don't know if such cases exist in real world files, so like you said,
> > if they don't then the test should generate in-range input. But if they
> > do, i'll fix the x86 asm (sadly, this means sse4 will be required
> > instead of sse2).
>
> I think it's probably best to limit the checkasm inputs that don't
> overflow, for now.
>
> // Martin
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
James Almer Dec. 30, 2023, 2:47 p.m. UTC | #6
On 12/30/2023 10:59 AM, flow gg wrote:
> Okay, it has been modified in this reply.

> From d62f363e3aad534c7ead5f3015029b3e7cbbff46 Mon Sep 17 00:00:00 2001
> From: sunyuechi <sunyuechi@iscas.ac.cn>
> Date: Fri, 29 Dec 2023 13:09:21 +0800
> Subject: [PATCH 2/3] checkasm/svqenc: add ssd_int8_vs_int16 test
> 
> ---
>  tests/checkasm/Makefile   |  1 +
>  tests/checkasm/checkasm.c |  3 ++
>  tests/checkasm/checkasm.h |  1 +
>  tests/checkasm/svq1enc.c  | 68 +++++++++++++++++++++++++++++++++++++++
>  tests/fate/checkasm.mak   |  1 +
>  5 files changed, 74 insertions(+)
>  create mode 100644 tests/checkasm/svq1enc.c
> 
> diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
> index 47328b59b9..f507e99993 100644
> --- a/tests/checkasm/Makefile
> +++ b/tests/checkasm/Makefile
> @@ -34,6 +34,7 @@ AVCODECOBJS-$(CONFIG_JPEG2000_DECODER)  += jpeg2000dsp.o
>  AVCODECOBJS-$(CONFIG_OPUS_DECODER)      += opusdsp.o
>  AVCODECOBJS-$(CONFIG_PIXBLOCKDSP)       += pixblockdsp.o
>  AVCODECOBJS-$(CONFIG_HEVC_DECODER)      += hevc_add_res.o hevc_deblock.o hevc_idct.o hevc_sao.o hevc_pel.o
> +AVCODECOBJS-$(CONFIG_SVQ1_ENCODER)      += svq1enc.o
>  AVCODECOBJS-$(CONFIG_TAK_DECODER)       += takdsp.o
>  AVCODECOBJS-$(CONFIG_UTVIDEO_DECODER)   += utvideodsp.o
>  AVCODECOBJS-$(CONFIG_V210_DECODER)      += v210dec.o
> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> index 57613af5f7..ff07d8b18d 100644
> --- a/tests/checkasm/checkasm.c
> +++ b/tests/checkasm/checkasm.c
> @@ -162,6 +162,9 @@ static const struct {
>      #if CONFIG_PIXBLOCKDSP
>          { "pixblockdsp", checkasm_check_pixblockdsp },
>      #endif
> +    #if CONFIG_SVQ1_ENCODER
> +        { "svq1enc", checkasm_check_svq1enc },
> +    #endif
>      #if CONFIG_TAK_DECODER
>          { "takdsp", checkasm_check_takdsp },
>      #endif
> diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
> index d7974772d3..c1f11cfa36 100644
> --- a/tests/checkasm/checkasm.h
> +++ b/tests/checkasm/checkasm.h
> @@ -82,6 +82,7 @@ void checkasm_check_nlmeans(void);
>  void checkasm_check_opusdsp(void);
>  void checkasm_check_pixblockdsp(void);
>  void checkasm_check_sbrdsp(void);
> +void checkasm_check_svq1enc(void);
>  void checkasm_check_synth_filter(void);
>  void checkasm_check_sw_gbrp(void);
>  void checkasm_check_sw_rgb(void);
> diff --git a/tests/checkasm/svq1enc.c b/tests/checkasm/svq1enc.c
> new file mode 100644
> index 0000000000..065dd798ca
> --- /dev/null
> +++ b/tests/checkasm/svq1enc.c
> @@ -0,0 +1,68 @@
> +/*
> + * Copyright (c) 2023 Institue of Software Chinese Academy of Sciences (ISCAS).
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
> + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> + */
> +
> +#include "libavutil/mem.h"
> +#include "libavutil/mem_internal.h"
> +
> +#include "libavcodec/svq1encdsp.h"
> +
> +#include "checkasm.h"
> +
> +#define BUF_SIZE 1024
> +
> +#define randomize(buf, len) \
> +    do { \
> +        for (int i = 0; i < len; i++) \
> +            buf[i] = ((rnd() % 65281) - 32641); \
> +    } while (0)
> +
> +static void test_ssd_int8_vs_int16(SVQ1EncDSPContext *s) {
> +    declare_func(int, const int8_t *pix1, const int16_t *pix2, intptr_t size);
> +
> +    int r1, r2;
> +
> +    if (check_func(s->ssd_int8_vs_int16, "ssd_int8_vs_int16")) {
> +        LOCAL_ALIGNED_32(int8_t, p1, [BUF_SIZE]);

This one should be LOCAL_ALIGNED_4(). See libavcodec/svq1_cb.h

> +        LOCAL_ALIGNED_32(int16_t, p2, [BUF_SIZE]);

And this one LOCAL_ALIGNED_16(). See encoded_block_levels[] in 
libavcodec/svq1enc.c

> +
> +        randomize(p1, BUF_SIZE);
> +        randomize(p2, BUF_SIZE);
> +
> +        r1 = call_ref(p1, p2, BUF_SIZE);
> +        r2 = call_new(p1, p2, BUF_SIZE);
> +
> +        if (r1 != r2) {
> +            fail();
> +        }
> +
> +        bench_new(p1, p2, BUF_SIZE);
> +    }
> +
> +    report("ssd_int8_vs_int16");
> +
> +}
> +
> +void checkasm_check_svq1enc(void)
> +{
> +    SVQ1EncDSPContext s = { 0 };
> +    ff_svq1enc_init(&s);
> +
> +    test_ssd_int8_vs_int16(&s);
> +}
> diff --git a/tests/fate/checkasm.mak b/tests/fate/checkasm.mak
> index 9e04b1b3cb..3d775549ee 100644
> --- a/tests/fate/checkasm.mak
> +++ b/tests/fate/checkasm.mak
> @@ -34,6 +34,7 @@ FATE_CHECKASM = fate-checkasm-aacencdsp                                 \
>                  fate-checkasm-opusdsp                                   \
>                  fate-checkasm-pixblockdsp                               \
>                  fate-checkasm-sbrdsp                                    \
> +                fate-checkasm-svq1enc                                   \
>                  fate-checkasm-synth_filter                              \
>                  fate-checkasm-sw_gbrp                                   \
>                  fate-checkasm-sw_rgb                                    \
> -- 
> 2.43.0
>
flow gg Dec. 30, 2023, 2:59 p.m. UTC | #7
Thank you, I learned this and updated it in this reply.

James Almer <jamrial@gmail.com> 于2023年12月30日周六 22:46写道:

> On 12/30/2023 10:59 AM, flow gg wrote:
> > Okay, it has been modified in this reply.
>
> > From d62f363e3aad534c7ead5f3015029b3e7cbbff46 Mon Sep 17 00:00:00 2001
> > From: sunyuechi <sunyuechi@iscas.ac.cn>
> > Date: Fri, 29 Dec 2023 13:09:21 +0800
> > Subject: [PATCH 2/3] checkasm/svqenc: add ssd_int8_vs_int16 test
> >
> > ---
> >  tests/checkasm/Makefile   |  1 +
> >  tests/checkasm/checkasm.c |  3 ++
> >  tests/checkasm/checkasm.h |  1 +
> >  tests/checkasm/svq1enc.c  | 68 +++++++++++++++++++++++++++++++++++++++
> >  tests/fate/checkasm.mak   |  1 +
> >  5 files changed, 74 insertions(+)
> >  create mode 100644 tests/checkasm/svq1enc.c
> >
> > diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
> > index 47328b59b9..f507e99993 100644
> > --- a/tests/checkasm/Makefile
> > +++ b/tests/checkasm/Makefile
> > @@ -34,6 +34,7 @@ AVCODECOBJS-$(CONFIG_JPEG2000_DECODER)  +=
> jpeg2000dsp.o
> >  AVCODECOBJS-$(CONFIG_OPUS_DECODER)      += opusdsp.o
> >  AVCODECOBJS-$(CONFIG_PIXBLOCKDSP)       += pixblockdsp.o
> >  AVCODECOBJS-$(CONFIG_HEVC_DECODER)      += hevc_add_res.o
> hevc_deblock.o hevc_idct.o hevc_sao.o hevc_pel.o
> > +AVCODECOBJS-$(CONFIG_SVQ1_ENCODER)      += svq1enc.o
> >  AVCODECOBJS-$(CONFIG_TAK_DECODER)       += takdsp.o
> >  AVCODECOBJS-$(CONFIG_UTVIDEO_DECODER)   += utvideodsp.o
> >  AVCODECOBJS-$(CONFIG_V210_DECODER)      += v210dec.o
> > diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> > index 57613af5f7..ff07d8b18d 100644
> > --- a/tests/checkasm/checkasm.c
> > +++ b/tests/checkasm/checkasm.c
> > @@ -162,6 +162,9 @@ static const struct {
> >      #if CONFIG_PIXBLOCKDSP
> >          { "pixblockdsp", checkasm_check_pixblockdsp },
> >      #endif
> > +    #if CONFIG_SVQ1_ENCODER
> > +        { "svq1enc", checkasm_check_svq1enc },
> > +    #endif
> >      #if CONFIG_TAK_DECODER
> >          { "takdsp", checkasm_check_takdsp },
> >      #endif
> > diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
> > index d7974772d3..c1f11cfa36 100644
> > --- a/tests/checkasm/checkasm.h
> > +++ b/tests/checkasm/checkasm.h
> > @@ -82,6 +82,7 @@ void checkasm_check_nlmeans(void);
> >  void checkasm_check_opusdsp(void);
> >  void checkasm_check_pixblockdsp(void);
> >  void checkasm_check_sbrdsp(void);
> > +void checkasm_check_svq1enc(void);
> >  void checkasm_check_synth_filter(void);
> >  void checkasm_check_sw_gbrp(void);
> >  void checkasm_check_sw_rgb(void);
> > diff --git a/tests/checkasm/svq1enc.c b/tests/checkasm/svq1enc.c
> > new file mode 100644
> > index 0000000000..065dd798ca
> > --- /dev/null
> > +++ b/tests/checkasm/svq1enc.c
> > @@ -0,0 +1,68 @@
> > +/*
> > + * Copyright (c) 2023 Institue of Software Chinese Academy of Sciences
> (ISCAS).
> > + *
> > + * This file is part of FFmpeg.
> > + *
> > + * FFmpeg is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License as published by
> > + * the Free Software Foundation; either version 2 of the License, or
> > + * (at your option) any later version.
> > + *
> > + * FFmpeg is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> along
> > + * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
> > + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> > + */
> > +
> > +#include "libavutil/mem.h"
> > +#include "libavutil/mem_internal.h"
> > +
> > +#include "libavcodec/svq1encdsp.h"
> > +
> > +#include "checkasm.h"
> > +
> > +#define BUF_SIZE 1024
> > +
> > +#define randomize(buf, len) \
> > +    do { \
> > +        for (int i = 0; i < len; i++) \
> > +            buf[i] = ((rnd() % 65281) - 32641); \
> > +    } while (0)
> > +
> > +static void test_ssd_int8_vs_int16(SVQ1EncDSPContext *s) {
> > +    declare_func(int, const int8_t *pix1, const int16_t *pix2, intptr_t
> size);
> > +
> > +    int r1, r2;
> > +
> > +    if (check_func(s->ssd_int8_vs_int16, "ssd_int8_vs_int16")) {
> > +        LOCAL_ALIGNED_32(int8_t, p1, [BUF_SIZE]);
>
> This one should be LOCAL_ALIGNED_4(). See libavcodec/svq1_cb.h
>
> > +        LOCAL_ALIGNED_32(int16_t, p2, [BUF_SIZE]);
>
> And this one LOCAL_ALIGNED_16(). See encoded_block_levels[] in
> libavcodec/svq1enc.c
>
> > +
> > +        randomize(p1, BUF_SIZE);
> > +        randomize(p2, BUF_SIZE);
> > +
> > +        r1 = call_ref(p1, p2, BUF_SIZE);
> > +        r2 = call_new(p1, p2, BUF_SIZE);
> > +
> > +        if (r1 != r2) {
> > +            fail();
> > +        }
> > +
> > +        bench_new(p1, p2, BUF_SIZE);
> > +    }
> > +
> > +    report("ssd_int8_vs_int16");
> > +
> > +}
> > +
> > +void checkasm_check_svq1enc(void)
> > +{
> > +    SVQ1EncDSPContext s = { 0 };
> > +    ff_svq1enc_init(&s);
> > +
> > +    test_ssd_int8_vs_int16(&s);
> > +}
> > diff --git a/tests/fate/checkasm.mak b/tests/fate/checkasm.mak
> > index 9e04b1b3cb..3d775549ee 100644
> > --- a/tests/fate/checkasm.mak
> > +++ b/tests/fate/checkasm.mak
> > @@ -34,6 +34,7 @@ FATE_CHECKASM = fate-checkasm-aacencdsp
>                  \
> >                  fate-checkasm-opusdsp
>  \
> >                  fate-checkasm-pixblockdsp
>  \
> >                  fate-checkasm-sbrdsp
> \
> > +                fate-checkasm-svq1enc
>  \
> >                  fate-checkasm-synth_filter
> \
> >                  fate-checkasm-sw_gbrp
>  \
> >                  fate-checkasm-sw_rgb
> \
> > --
> > 2.43.0
> >
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
diff mbox series

Patch

From 8bde7750ec7adc2437843e14d4be85fb900d1b16 Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyuechi@iscas.ac.cn>
Date: Fri, 29 Dec 2023 13:09:21 +0800
Subject: [PATCH 2/3] checkasm/svqenc: add ssd_int8_vs_int16 test

---
 tests/checkasm/Makefile   |  1 +
 tests/checkasm/checkasm.c |  3 ++
 tests/checkasm/checkasm.h |  1 +
 tests/checkasm/svq1enc.c  | 68 +++++++++++++++++++++++++++++++++++++++
 tests/fate/checkasm.mak   |  1 +
 5 files changed, 74 insertions(+)
 create mode 100644 tests/checkasm/svq1enc.c

diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
index 47328b59b9..f507e99993 100644
--- a/tests/checkasm/Makefile
+++ b/tests/checkasm/Makefile
@@ -34,6 +34,7 @@  AVCODECOBJS-$(CONFIG_JPEG2000_DECODER)  += jpeg2000dsp.o
 AVCODECOBJS-$(CONFIG_OPUS_DECODER)      += opusdsp.o
 AVCODECOBJS-$(CONFIG_PIXBLOCKDSP)       += pixblockdsp.o
 AVCODECOBJS-$(CONFIG_HEVC_DECODER)      += hevc_add_res.o hevc_deblock.o hevc_idct.o hevc_sao.o hevc_pel.o
+AVCODECOBJS-$(CONFIG_SVQ1_ENCODER)      += svq1enc.o
 AVCODECOBJS-$(CONFIG_TAK_DECODER)       += takdsp.o
 AVCODECOBJS-$(CONFIG_UTVIDEO_DECODER)   += utvideodsp.o
 AVCODECOBJS-$(CONFIG_V210_DECODER)      += v210dec.o
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index 57613af5f7..ff07d8b18d 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -162,6 +162,9 @@  static const struct {
     #if CONFIG_PIXBLOCKDSP
         { "pixblockdsp", checkasm_check_pixblockdsp },
     #endif
+    #if CONFIG_SVQ1_ENCODER
+        { "svq1enc", checkasm_check_svq1enc },
+    #endif
     #if CONFIG_TAK_DECODER
         { "takdsp", checkasm_check_takdsp },
     #endif
diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
index d7974772d3..c1f11cfa36 100644
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -82,6 +82,7 @@  void checkasm_check_nlmeans(void);
 void checkasm_check_opusdsp(void);
 void checkasm_check_pixblockdsp(void);
 void checkasm_check_sbrdsp(void);
+void checkasm_check_svq1enc(void);
 void checkasm_check_synth_filter(void);
 void checkasm_check_sw_gbrp(void);
 void checkasm_check_sw_rgb(void);
diff --git a/tests/checkasm/svq1enc.c b/tests/checkasm/svq1enc.c
new file mode 100644
index 0000000000..5d21abc8ad
--- /dev/null
+++ b/tests/checkasm/svq1enc.c
@@ -0,0 +1,68 @@ 
+/*
+ * Copyright (c) 2023 Institue of Software Chinese Academy of Sciences (ISCAS).
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "libavutil/mem.h"
+#include "libavutil/mem_internal.h"
+
+#include "libavcodec/svq1encdsp.h"
+
+#include "checkasm.h"
+
+#define BUF_SIZE 1024
+
+#define randomize(buf, len) \
+    do { \
+        for (int i = 0; i < len; i++) \
+            buf[i] = rnd(); \
+    } while (0)
+
+static void test_ssd_int8_vs_int16(SVQ1EncDSPContext *s) {
+    declare_func(int, const int8_t *pix1, const int16_t *pix2, intptr_t size);
+
+    int r1, r2;
+
+    if (check_func(s->ssd_int8_vs_int16, "ssd_int8_vs_int16")) {
+        LOCAL_ALIGNED_32(int8_t, p1, [BUF_SIZE]);
+        LOCAL_ALIGNED_32(int16_t, p2, [BUF_SIZE]);
+
+        randomize(p1, BUF_SIZE);
+        randomize(p2, BUF_SIZE);
+
+        r1 = call_ref(p1, p2, BUF_SIZE);
+        r2 = call_new(p1, p2, BUF_SIZE);
+
+        if (r1 != r2) {
+            fail();
+        }
+
+        bench_new(p1, p2, BUF_SIZE);
+    }
+
+    report("ssd_int8_vs_int16");
+
+}
+
+void checkasm_check_svq1enc(void)
+{
+    SVQ1EncDSPContext s = { 0 };
+    ff_svq1enc_init(&s);
+
+    test_ssd_int8_vs_int16(&s);
+}
diff --git a/tests/fate/checkasm.mak b/tests/fate/checkasm.mak
index 9e04b1b3cb..3d775549ee 100644
--- a/tests/fate/checkasm.mak
+++ b/tests/fate/checkasm.mak
@@ -34,6 +34,7 @@  FATE_CHECKASM = fate-checkasm-aacencdsp                                 \
                 fate-checkasm-opusdsp                                   \
                 fate-checkasm-pixblockdsp                               \
                 fate-checkasm-sbrdsp                                    \
+                fate-checkasm-svq1enc                                   \
                 fate-checkasm-synth_filter                              \
                 fate-checkasm-sw_gbrp                                   \
                 fate-checkasm-sw_rgb                                    \
-- 
2.43.0