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

2023-12-30 Thread flow gg
Thank you, I learned this and updated it in this reply.

James Almer  于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 
> > 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..f507e3 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 00..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 };
> 

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

2023-12-30 Thread James Almer

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 
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..f507e3 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 00..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();
+
+test_ssd_int8_vs_int16();
+}
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 

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

2023-12-30 Thread flow gg
Okay, it has been modified in this reply.

Martin Storsjö  于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-requ...@ffmpeg.org with subject "unsubscribe".
>
From d62f363e3aad534c7ead5f3015029b3e7cbbff46 Mon Sep 17 00:00:00 2001
From: sunyuechi 
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..f507e3 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 00..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++) \
+ 

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

2023-12-30 Thread Rémi Denis-Courmont


Le 29 décembre 2023 12:57:01 GMT+01:00, flow gg  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.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


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

2023-12-29 Thread Martin Storsjö

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-requ...@ffmpeg.org with subject "unsubscribe".


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

2023-12-29 Thread James Almer

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).

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


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

2023-12-29 Thread Martin Storsjö

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

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


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

2023-12-29 Thread flow gg
Tests on x86 might fail, possibly due to a 16-bit sub overflow
From 8bde7750ec7adc2437843e14d4be85fb900d1b16 Mon Sep 17 00:00:00 2001
From: sunyuechi 
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..f507e3 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 00..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();
+
+test_ssd_int8_vs_int16();
+}
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