| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | * Assembly testing and benchmarking tool | ||
| 3 | * Copyright (c) 2025 Niklas Haas | ||
| 4 | * Copyright (c) 2015 Henrik Gramner | ||
| 5 | * Copyright (c) 2008 Loren Merritt | ||
| 6 | * | ||
| 7 | * This file is part of FFmpeg. | ||
| 8 | * | ||
| 9 | * FFmpeg is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * FFmpeg is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License along | ||
| 20 | * with FFmpeg; if not, write to the Free Software Foundation, Inc., | ||
| 21 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 22 | * | ||
| 23 | * Copyright © 2018, VideoLAN and dav1d authors | ||
| 24 | * Copyright © 2018, Two Orioles, LLC | ||
| 25 | * All rights reserved. | ||
| 26 | * | ||
| 27 | * Redistribution and use in source and binary forms, with or without | ||
| 28 | * modification, are permitted provided that the following conditions are met: | ||
| 29 | * | ||
| 30 | * 1. Redistributions of source code must retain the above copyright notice, this | ||
| 31 | * list of conditions and the following disclaimer. | ||
| 32 | * | ||
| 33 | * 2. Redistributions in binary form must reproduce the above copyright notice, | ||
| 34 | * this list of conditions and the following disclaimer in the documentation | ||
| 35 | * and/or other materials provided with the distribution. | ||
| 36 | * | ||
| 37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||
| 38 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| 39 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| 40 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR | ||
| 41 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| 42 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 43 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
| 44 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 45 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| 46 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 47 | */ | ||
| 48 | |||
| 49 | #include "config.h" | ||
| 50 | #include "config_components.h" | ||
| 51 | |||
| 52 | #include <checkasm/checkasm.h> | ||
| 53 | |||
| 54 | #include "checkasm.h" | ||
| 55 | |||
| 56 | /* List of tests to invoke */ | ||
| 57 | static const CheckasmTest tests[] = { | ||
| 58 | /* NOTE: When adding a new test to this list here, it also needs to be | ||
| 59 | * added in tests/fate/checkasm.mak, otherwise it doesn't get executed | ||
| 60 | * as part of "make fate" or "make fate-checkasm". */ | ||
| 61 | #if CONFIG_AVCODEC | ||
| 62 | #if CONFIG_AAC_DECODER | ||
| 63 | { "aacpsdsp", checkasm_check_aacpsdsp }, | ||
| 64 | { "sbrdsp", checkasm_check_sbrdsp }, | ||
| 65 | #endif | ||
| 66 | #if CONFIG_AAC_ENCODER | ||
| 67 | { "aacencdsp", checkasm_check_aacencdsp }, | ||
| 68 | #endif | ||
| 69 | #if CONFIG_AC3DSP | ||
| 70 | { "ac3dsp", checkasm_check_ac3dsp }, | ||
| 71 | #endif | ||
| 72 | #if CONFIG_ALAC_DECODER | ||
| 73 | { "alacdsp", checkasm_check_alacdsp }, | ||
| 74 | #endif | ||
| 75 | #if CONFIG_APV_DECODER | ||
| 76 | { "apv_dsp", checkasm_check_apv_dsp }, | ||
| 77 | #endif | ||
| 78 | #if CONFIG_AUDIODSP | ||
| 79 | { "audiodsp", checkasm_check_audiodsp }, | ||
| 80 | #endif | ||
| 81 | #if CONFIG_BLOCKDSP | ||
| 82 | { "blockdsp", checkasm_check_blockdsp }, | ||
| 83 | #endif | ||
| 84 | #if CONFIG_BSWAPDSP | ||
| 85 | { "bswapdsp", checkasm_check_bswapdsp }, | ||
| 86 | #endif | ||
| 87 | #if CONFIG_CAVS_DECODER | ||
| 88 | { "cavsdsp", checkasm_check_cavsdsp }, | ||
| 89 | #endif | ||
| 90 | #if CONFIG_DCA_DECODER | ||
| 91 | { "dcadsp", checkasm_check_dcadsp }, | ||
| 92 | { "synth_filter", checkasm_check_synth_filter }, | ||
| 93 | #endif | ||
| 94 | #if CONFIG_DIRAC_DECODER | ||
| 95 | { "diracdsp", checkasm_check_diracdsp }, | ||
| 96 | #endif | ||
| 97 | #if CONFIG_EXR_DECODER | ||
| 98 | { "exrdsp", checkasm_check_exrdsp }, | ||
| 99 | #endif | ||
| 100 | #if CONFIG_FDCTDSP | ||
| 101 | { "fdctdsp", checkasm_check_fdctdsp }, | ||
| 102 | #endif | ||
| 103 | #if CONFIG_FLAC_DECODER | ||
| 104 | { "flacdsp", checkasm_check_flacdsp }, | ||
| 105 | #endif | ||
| 106 | #if CONFIG_G722DSP | ||
| 107 | { "g722dsp", checkasm_check_g722dsp }, | ||
| 108 | #endif | ||
| 109 | #if CONFIG_H263DSP | ||
| 110 | { "h263dsp", checkasm_check_h263dsp }, | ||
| 111 | #endif | ||
| 112 | #if CONFIG_H264CHROMA | ||
| 113 | { "h264chroma", checkasm_check_h264chroma }, | ||
| 114 | #endif | ||
| 115 | #if CONFIG_H264DSP | ||
| 116 | { "h264dsp", checkasm_check_h264dsp }, | ||
| 117 | #endif | ||
| 118 | #if CONFIG_H264PRED | ||
| 119 | { "h264pred", checkasm_check_h264pred }, | ||
| 120 | #endif | ||
| 121 | #if CONFIG_H264QPEL | ||
| 122 | { "h264qpel", checkasm_check_h264qpel }, | ||
| 123 | #endif | ||
| 124 | #if CONFIG_HEVC_DECODER | ||
| 125 | { "hevc_add_res", checkasm_check_hevc_add_res }, | ||
| 126 | { "hevc_deblock", checkasm_check_hevc_deblock }, | ||
| 127 | { "hevc_dequant", checkasm_check_hevc_dequant }, | ||
| 128 | { "hevc_idct", checkasm_check_hevc_idct }, | ||
| 129 | { "hevc_pel", checkasm_check_hevc_pel }, | ||
| 130 | { "hevc_pred", checkasm_check_hevc_pred }, | ||
| 131 | { "hevc_sao", checkasm_check_hevc_sao }, | ||
| 132 | #endif | ||
| 133 | #if CONFIG_HPELDSP | ||
| 134 | { "hpeldsp", checkasm_check_hpeldsp }, | ||
| 135 | #endif | ||
| 136 | #if CONFIG_HUFFYUVDSP | ||
| 137 | { "huffyuvdsp", checkasm_check_huffyuvdsp }, | ||
| 138 | #endif | ||
| 139 | #if CONFIG_HUFFYUVENCDSP | ||
| 140 | { "huffyuvencdsp", checkasm_check_huffyuvencdsp }, | ||
| 141 | #endif | ||
| 142 | #if CONFIG_IDCTDSP | ||
| 143 | { "idctdsp", checkasm_check_idctdsp }, | ||
| 144 | #endif | ||
| 145 | #if CONFIG_JPEG2000_DECODER | ||
| 146 | { "jpeg2000dsp", checkasm_check_jpeg2000dsp }, | ||
| 147 | #endif | ||
| 148 | #if CONFIG_LLAUDDSP | ||
| 149 | { "llauddsp", checkasm_check_llauddsp }, | ||
| 150 | #endif | ||
| 151 | #if CONFIG_HUFFYUVDSP | ||
| 152 | { "llviddsp", checkasm_check_llviddsp }, | ||
| 153 | #endif | ||
| 154 | #if CONFIG_LLVIDENCDSP | ||
| 155 | { "llvidencdsp", checkasm_check_llvidencdsp }, | ||
| 156 | #endif | ||
| 157 | #if CONFIG_LPC | ||
| 158 | { "lpc", checkasm_check_lpc }, | ||
| 159 | #endif | ||
| 160 | #if CONFIG_ME_CMP | ||
| 161 | { "motion", checkasm_check_motion }, | ||
| 162 | #endif | ||
| 163 | #if CONFIG_MPEG4_DECODER | ||
| 164 | { "mpeg4videodsp", checkasm_check_mpeg4videodsp }, | ||
| 165 | #endif | ||
| 166 | #if CONFIG_MPEGVIDEO | ||
| 167 | { "mpegvideo_unquantize", checkasm_check_mpegvideo_unquantize }, | ||
| 168 | #endif | ||
| 169 | #if CONFIG_MPEGVIDEOENCDSP | ||
| 170 | { "mpegvideoencdsp", checkasm_check_mpegvideoencdsp }, | ||
| 171 | #endif | ||
| 172 | #if CONFIG_OPUS_DECODER | ||
| 173 | { "opusdsp", checkasm_check_opusdsp }, | ||
| 174 | #endif | ||
| 175 | #if CONFIG_PIXBLOCKDSP | ||
| 176 | { "pixblockdsp", checkasm_check_pixblockdsp }, | ||
| 177 | #endif | ||
| 178 | #if CONFIG_PNG_DECODER | ||
| 179 | { "png", checkasm_check_png }, | ||
| 180 | #endif | ||
| 181 | #if CONFIG_QPELDSP | ||
| 182 | { "qpeldsp", checkasm_check_qpeldsp }, | ||
| 183 | #endif | ||
| 184 | #if CONFIG_RV34DSP | ||
| 185 | { "rv34dsp", checkasm_check_rv34dsp }, | ||
| 186 | #endif | ||
| 187 | #if CONFIG_RV40_DECODER | ||
| 188 | { "rv40dsp", checkasm_check_rv40dsp }, | ||
| 189 | #endif | ||
| 190 | #if CONFIG_SBC_ENCODER | ||
| 191 | { "sbcdsp", checkasm_check_sbcdsp }, | ||
| 192 | #endif | ||
| 193 | #if CONFIG_SNOW_DECODER | ||
| 194 | { "snowdsp", checkasm_check_snowdsp }, | ||
| 195 | #endif | ||
| 196 | #if CONFIG_SVQ1_ENCODER | ||
| 197 | { "svq1enc", checkasm_check_svq1enc }, | ||
| 198 | #endif | ||
| 199 | #if CONFIG_TAK_DECODER | ||
| 200 | { "takdsp", checkasm_check_takdsp }, | ||
| 201 | #endif | ||
| 202 | #if CONFIG_TTA_DECODER | ||
| 203 | { "ttadsp", checkasm_check_ttadsp }, | ||
| 204 | #endif | ||
| 205 | #if CONFIG_TTA_ENCODER | ||
| 206 | { "ttaencdsp", checkasm_check_ttaencdsp }, | ||
| 207 | #endif | ||
| 208 | #if CONFIG_UTVIDEO_DECODER | ||
| 209 | { "utvideodsp", checkasm_check_utvideodsp }, | ||
| 210 | #endif | ||
| 211 | #if CONFIG_V210_DECODER | ||
| 212 | { "v210dec", checkasm_check_v210dec }, | ||
| 213 | #endif | ||
| 214 | #if CONFIG_V210_ENCODER | ||
| 215 | { "v210enc", checkasm_check_v210enc }, | ||
| 216 | #endif | ||
| 217 | #if CONFIG_VC1DSP | ||
| 218 | { "vc1dsp", checkasm_check_vc1dsp }, | ||
| 219 | #endif | ||
| 220 | #if CONFIG_VP3DSP | ||
| 221 | { "vp3dsp", checkasm_check_vp3dsp }, | ||
| 222 | #endif | ||
| 223 | #if CONFIG_VP6_DECODER | ||
| 224 | { "vp6dsp", checkasm_check_vp6dsp }, | ||
| 225 | #endif | ||
| 226 | #if CONFIG_VP8DSP | ||
| 227 | { "vp8dsp", checkasm_check_vp8dsp }, | ||
| 228 | #endif | ||
| 229 | #if CONFIG_VP9_DECODER | ||
| 230 | { "vp9dsp", checkasm_check_vp9dsp }, | ||
| 231 | #endif | ||
| 232 | #if CONFIG_VIDEODSP | ||
| 233 | { "videodsp", checkasm_check_videodsp }, | ||
| 234 | #endif | ||
| 235 | #if CONFIG_VORBIS_DECODER | ||
| 236 | { "vorbisdsp", checkasm_check_vorbisdsp }, | ||
| 237 | #endif | ||
| 238 | #if CONFIG_VVC_DECODER | ||
| 239 | { "vvc_alf", checkasm_check_vvc_alf }, | ||
| 240 | { "vvc_mc", checkasm_check_vvc_mc }, | ||
| 241 | { "vvc_sao", checkasm_check_vvc_sao }, | ||
| 242 | #endif | ||
| 243 | #endif | ||
| 244 | #if CONFIG_AVFILTER | ||
| 245 | #if CONFIG_SCENE_SAD | ||
| 246 | { "scene_sad", checkasm_check_scene_sad }, | ||
| 247 | #endif | ||
| 248 | #if CONFIG_AFIR_FILTER | ||
| 249 | { "af_afir", checkasm_check_afir }, | ||
| 250 | #endif | ||
| 251 | #if CONFIG_BLACKDETECT_FILTER | ||
| 252 | { "vf_blackdetect", checkasm_check_blackdetect }, | ||
| 253 | #endif | ||
| 254 | #if CONFIG_BLEND_FILTER | ||
| 255 | { "vf_blend", checkasm_check_blend }, | ||
| 256 | #endif | ||
| 257 | #if CONFIG_BWDIF_FILTER | ||
| 258 | { "vf_bwdif", checkasm_check_vf_bwdif }, | ||
| 259 | #endif | ||
| 260 | #if CONFIG_COLORDETECT_FILTER | ||
| 261 | { "vf_colordetect", checkasm_check_colordetect }, | ||
| 262 | #endif | ||
| 263 | #if CONFIG_COLORSPACE_FILTER | ||
| 264 | { "vf_colorspace", checkasm_check_colorspace }, | ||
| 265 | #endif | ||
| 266 | #if CONFIG_EQ_FILTER | ||
| 267 | { "vf_eq", checkasm_check_vf_eq }, | ||
| 268 | #endif | ||
| 269 | #if CONFIG_FSPP_FILTER | ||
| 270 | { "vf_fspp", checkasm_check_vf_fspp }, | ||
| 271 | #endif | ||
| 272 | #if CONFIG_GBLUR_FILTER | ||
| 273 | { "vf_gblur", checkasm_check_vf_gblur }, | ||
| 274 | #endif | ||
| 275 | #if CONFIG_HFLIP_FILTER | ||
| 276 | { "vf_hflip", checkasm_check_vf_hflip }, | ||
| 277 | #endif | ||
| 278 | #if CONFIG_IDET_FILTER | ||
| 279 | { "vf_idet", checkasm_check_idet }, | ||
| 280 | #endif | ||
| 281 | #if CONFIG_NLMEANS_FILTER | ||
| 282 | { "vf_nlmeans", checkasm_check_nlmeans }, | ||
| 283 | #endif | ||
| 284 | #if CONFIG_PP7_FILTER | ||
| 285 | { "vf_pp7", checkasm_check_vf_pp7 }, | ||
| 286 | #endif | ||
| 287 | #if CONFIG_THRESHOLD_FILTER | ||
| 288 | { "vf_threshold", checkasm_check_vf_threshold }, | ||
| 289 | #endif | ||
| 290 | #if CONFIG_SOBEL_FILTER | ||
| 291 | { "vf_sobel", checkasm_check_vf_sobel }, | ||
| 292 | #endif | ||
| 293 | #endif | ||
| 294 | #if CONFIG_SWSCALE | ||
| 295 | { "sw_gbrp", checkasm_check_sw_gbrp }, | ||
| 296 | { "sw_range_convert", checkasm_check_sw_range_convert }, | ||
| 297 | { "sw_rgb", checkasm_check_sw_rgb }, | ||
| 298 | { "sw_scale", checkasm_check_sw_scale }, | ||
| 299 | { "sw_xyz2rgb", checkasm_check_sw_xyz2rgb }, | ||
| 300 | { "sw_yuv2rgb", checkasm_check_sw_yuv2rgb }, | ||
| 301 | { "sw_yuv2yuv", checkasm_check_sw_yuv2yuv }, | ||
| 302 | { "sw_ops", checkasm_check_sw_ops }, | ||
| 303 | #endif | ||
| 304 | #if CONFIG_AVUTIL | ||
| 305 | { "aes", checkasm_check_aes }, | ||
| 306 | { "crc", checkasm_check_crc, .uninit = checkasm_uninit_crc }, | ||
| 307 | { "fixed_dsp", checkasm_check_fixed_dsp }, | ||
| 308 | { "float_dsp", checkasm_check_float_dsp }, | ||
| 309 | { "lls", checkasm_check_lls }, | ||
| 310 | #if CONFIG_PIXELUTILS | ||
| 311 | { "pixelutils",checkasm_check_pixelutils }, | ||
| 312 | #endif | ||
| 313 | { "av_tx", checkasm_check_av_tx, .uninit = checkasm_uninit_tx }, | ||
| 314 | #endif | ||
| 315 | { NULL } | ||
| 316 | /* NOTE: When adding a new test to this list here, it also needs to be | ||
| 317 | * added in tests/fate/checkasm.mak, otherwise it doesn't get executed | ||
| 318 | * as part of "make fate" or "make fate-checkasm". */ | ||
| 319 | }; | ||
| 320 | |||
| 321 | /* List of cpu flags to check */ | ||
| 322 | static const CheckasmCpuInfo cpuflags[] = { | ||
| 323 | #if ARCH_AARCH64 | ||
| 324 | { "ARMV8", "armv8", AV_CPU_FLAG_ARMV8 }, | ||
| 325 | { "NEON", "neon", AV_CPU_FLAG_NEON }, | ||
| 326 | { "DOTPROD", "dotprod", AV_CPU_FLAG_DOTPROD }, | ||
| 327 | { "I8MM", "i8mm", AV_CPU_FLAG_I8MM }, | ||
| 328 | { "SVE", "sve", AV_CPU_FLAG_SVE }, | ||
| 329 | { "SVE2", "sve2", AV_CPU_FLAG_SVE2 }, | ||
| 330 | { "SME", "sme", AV_CPU_FLAG_SME }, | ||
| 331 | { "SME-I16I64", "sme_i16i64", AV_CPU_FLAG_SME_I16I64 }, | ||
| 332 | { "CRC", "crc", AV_CPU_FLAG_ARM_CRC }, | ||
| 333 | { "SME2", "sme2", AV_CPU_FLAG_SME2 }, | ||
| 334 | { "PMULL", "pmull_eor3", AV_CPU_FLAG_PMULL|AV_CPU_FLAG_EOR3 }, | ||
| 335 | #elif ARCH_ARM | ||
| 336 | { "ARMV5TE", "armv5te", AV_CPU_FLAG_ARMV5TE }, | ||
| 337 | { "ARMV6", "armv6", AV_CPU_FLAG_ARMV6 }, | ||
| 338 | { "ARMV6T2", "armv6t2", AV_CPU_FLAG_ARMV6T2 }, | ||
| 339 | { "VFP", "vfp", AV_CPU_FLAG_VFP }, | ||
| 340 | { "VFP_VM", "vfp_vm", AV_CPU_FLAG_VFP_VM }, | ||
| 341 | { "VFPV3", "vfp3", AV_CPU_FLAG_VFPV3 }, | ||
| 342 | { "NEON", "neon", AV_CPU_FLAG_NEON }, | ||
| 343 | #elif ARCH_PPC | ||
| 344 | { "ALTIVEC", "altivec", AV_CPU_FLAG_ALTIVEC }, | ||
| 345 | { "VSX", "vsx", AV_CPU_FLAG_VSX }, | ||
| 346 | { "POWER8", "power8", AV_CPU_FLAG_POWER8 }, | ||
| 347 | #elif ARCH_RISCV | ||
| 348 | { "RVI", "rvi", AV_CPU_FLAG_RVI }, | ||
| 349 | { "misaligned", "misaligned", AV_CPU_FLAG_RV_MISALIGNED }, | ||
| 350 | { "RV_zbb", "rvb_b", AV_CPU_FLAG_RVB_BASIC }, | ||
| 351 | { "RVB", "rvb", AV_CPU_FLAG_RVB }, | ||
| 352 | { "RV_zve32x","rvv_i32", AV_CPU_FLAG_RVV_I32 }, | ||
| 353 | { "RV_zve32f","rvv_f32", AV_CPU_FLAG_RVV_F32 }, | ||
| 354 | { "RV_zve64x","rvv_i64", AV_CPU_FLAG_RVV_I64 }, | ||
| 355 | { "RV_zve64d","rvv_f64", AV_CPU_FLAG_RVV_F64 }, | ||
| 356 | { "RV_zvbb", "rv_zvbb", AV_CPU_FLAG_RV_ZVBB }, | ||
| 357 | #elif ARCH_MIPS | ||
| 358 | { "MMI", "mmi", AV_CPU_FLAG_MMI }, | ||
| 359 | { "MSA", "msa", AV_CPU_FLAG_MSA }, | ||
| 360 | #elif ARCH_X86 | ||
| 361 | { "MMX", "mmx", AV_CPU_FLAG_MMX|AV_CPU_FLAG_CMOV }, | ||
| 362 | { "MMXEXT", "mmxext", AV_CPU_FLAG_MMXEXT }, | ||
| 363 | { "SSE", "sse", AV_CPU_FLAG_SSE }, | ||
| 364 | { "SSE2", "sse2", AV_CPU_FLAG_SSE2|AV_CPU_FLAG_SSE2SLOW }, | ||
| 365 | { "SSE3", "sse3", AV_CPU_FLAG_SSE3|AV_CPU_FLAG_SSE3SLOW }, | ||
| 366 | { "SSSE3", "ssse3", AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM }, | ||
| 367 | { "SSE4.1", "sse4", AV_CPU_FLAG_SSE4 }, | ||
| 368 | { "SSE4.2", "sse42", AV_CPU_FLAG_SSE42 }, | ||
| 369 | { "AES-NI", "aesni", AV_CPU_FLAG_AESNI }, | ||
| 370 | { "CLMUL", "clmul", AV_CPU_FLAG_CLMUL }, | ||
| 371 | { "AVX", "avx", AV_CPU_FLAG_AVX }, | ||
| 372 | { "XOP", "xop", AV_CPU_FLAG_XOP }, | ||
| 373 | { "FMA3", "fma3", AV_CPU_FLAG_FMA3 }, | ||
| 374 | { "FMA4", "fma4", AV_CPU_FLAG_FMA4 }, | ||
| 375 | { "AVX2", "avx2", AV_CPU_FLAG_AVX2 }, | ||
| 376 | { "AVX-512", "avx512", AV_CPU_FLAG_AVX512 }, | ||
| 377 | { "AVX-512ICL", "avx512icl", AV_CPU_FLAG_AVX512ICL }, | ||
| 378 | #elif ARCH_LOONGARCH | ||
| 379 | { "LSX", "lsx", AV_CPU_FLAG_LSX }, | ||
| 380 | { "LASX", "lasx", AV_CPU_FLAG_LASX }, | ||
| 381 | #elif ARCH_WASM | ||
| 382 | { "SIMD128", "simd128", AV_CPU_FLAG_SIMD128 }, | ||
| 383 | #endif | ||
| 384 | { NULL } | ||
| 385 | }; | ||
| 386 | |||
| 387 | 1372 | static void set_cpu_flags(uint64_t flags) | |
| 388 | { | ||
| 389 | 1372 | av_force_cpu_flags((int) flags); | |
| 390 | 1372 | } | |
| 391 | |||
| 392 | 98 | int main(int argc, const char *argv[]) | |
| 393 | { | ||
| 394 | 196 | CheckasmConfig cfg = { | |
| 395 | .cpu_flags = cpuflags, | ||
| 396 | .tests = tests, | ||
| 397 | .set_cpu_flags = set_cpu_flags, | ||
| 398 | 98 | .cpu = av_get_cpu_flags(), | |
| 399 | }; | ||
| 400 | |||
| 401 | 98 | return checkasm_main(&cfg, argc, argv); | |
| 402 | } | ||
| 403 |