History

avutil/cpu: add AVX512 Icelake flag

Wu Jianhua committed 4 years ago

Commit f629ea21 parent e6e3aae9 files · +67 −50Browse files

Unified · Split

9 files
  1. configure +9 −4
  2. doc/APIchanges +3 −0
  3. libavutil/cpu.c +1 −0
  4. libavutil/cpu.h +1 −0
  5. libavutil/version.h +1 −1
  6. libavutil/x86/cpu.c +6 −2
  7. libavutil/x86/cpu.h +1 −0
  8. libavutil/x86/x86inc.asm +27 −26
  9. tests/checkasm/checkasm.c +18 −17
configure+9−4
@@ -443,6 +443,7 @@ Optimization options (experts only): · 442 unmodified lines
443 --disable-fma4 disable FMA4 optimizations443 --disable-fma4 disable FMA4 optimizations
444 --disable-avx2 disable AVX2 optimizations444 --disable-avx2 disable AVX2 optimizations
445 --disable-avx512 disable AVX-512 optimizations445 --disable-avx512 disable AVX-512 optimizations
446 --disable-avx512icl disable AVX-512ICL optimizations
446 --disable-aesni disable AESNI optimizations447 --disable-aesni disable AESNI optimizations
447 --disable-armv5te disable armv5te optimizations448 --disable-armv5te disable armv5te optimizations
448 --disable-armv6 disable armv6 optimizations449 --disable-armv6 disable armv6 optimizations
@@ -2096,6 +2097,7 @@ ARCH_EXT_LIST_X86_SIMD=" · 1647 unmodified lines
2096 avx2097 avx
2097 avx22098 avx2
2098 avx5122099 avx512
2100 avx512icl
2099 fma32101 fma3
2100 fma42102 fma4
2101 mmx2103 mmx
@@ -2665,6 +2667,7 @@ fma3_deps="avx" · 563 unmodified lines
2665fma4_deps="avx"2667fma4_deps="avx"
2666avx2_deps="avx"2668avx2_deps="avx"
2667avx512_deps="avx2"2669avx512_deps="avx2"
2670avx512icl_deps="avx512"
2668 2671
2669mmx_external_deps="x86asm"2672mmx_external_deps="x86asm"
2670mmx_inline_deps="inline_asm x86"2673mmx_inline_deps="inline_asm x86"
@@ -6126,10 +6129,11 @@ EOF · 3455 unmodified lines
6126 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;6129 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
6127 esac6130 esac
6128 6131
6129 enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"6132 enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
6130 enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"6133 enabled avx512icl && check_x86asm avx512icl_external "vpdpwssds zmm31{k1}{z}, zmm29, zmm28"
6131 enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"6134 enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
6132 enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"6135 enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
6136 enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
6133 check_x86asm cpunop "CPU amdnop"6137 check_x86asm cpunop "CPU amdnop"
6134 fi6138 fi
6135 6139
@@ -7469,6 +7473,7 @@ if enabled x86; then · 1333 unmodified lines
7469 echo "AVX enabled ${avx-no}"7473 echo "AVX enabled ${avx-no}"
7470 echo "AVX2 enabled ${avx2-no}"7474 echo "AVX2 enabled ${avx2-no}"
7471 echo "AVX-512 enabled ${avx512-no}"7475 echo "AVX-512 enabled ${avx512-no}"
7476 echo "AVX-512ICL enabled ${avx512icl-no}"
7472 echo "XOP enabled ${xop-no}"7477 echo "XOP enabled ${xop-no}"
7473 echo "FMA3 enabled ${fma3-no}"7478 echo "FMA3 enabled ${fma3-no}"
7474 echo "FMA4 enabled ${fma4-no}"7479 echo "FMA4 enabled ${fma4-no}"
doc/APIchanges+3−0
@@ -14,6 +14,9 @@ libavutil: 2021-04-27 · 13 unmodified lines
14 14
15API changes, most recent first:15API changes, most recent first:
16 16
172022-03-10 - xxxxxxxxxx - lavu 57.23.100 - cpu.h
18 Add AV_CPU_FLAG_AVX512ICL.
19
172022-02-07 - xxxxxxxxxx - lavu 57.21.100 - fifo.h202022-02-07 - xxxxxxxxxx - lavu 57.21.100 - fifo.h
18 Deprecate AVFifoBuffer and the API around it, namely av_fifo_alloc(),21 Deprecate AVFifoBuffer and the API around it, namely av_fifo_alloc(),
19 av_fifo_alloc_array(), av_fifo_free(), av_fifo_freep(), av_fifo_reset(),22 av_fifo_alloc_array(), av_fifo_free(), av_fifo_freep(), av_fifo_reset(),
libavutil/cpu.c+1−0
@@ -137,6 +137,7 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) · 136 unmodified lines
137 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },137 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },
138 { "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" },138 { "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" },
139 { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512 }, .unit = "flags" },139 { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512 }, .unit = "flags" },
140 { "avx512icl", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512ICL }, .unit = "flags" },
140 { "slowgather", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SLOW_GATHER }, .unit = "flags" },141 { "slowgather", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SLOW_GATHER }, .unit = "flags" },
141 142
142#define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX143#define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX
libavutil/cpu.h+1−0
@@ -54,6 +54,7 @@ · 53 unmodified lines
54#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 154#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
55#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 255#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
56#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used56#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
57#define AV_CPU_FLAG_AVX512ICL 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ
57#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers.58#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers.
58 59
59#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard60#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
libavutil/version.h+1−1
@@ -79,7 +79,7 @@ · 78 unmodified lines
79 */79 */
80 80
81#define LIBAVUTIL_VERSION_MAJOR 5781#define LIBAVUTIL_VERSION_MAJOR 57
82#define LIBAVUTIL_VERSION_MINOR 2282#define LIBAVUTIL_VERSION_MINOR 23
83#define LIBAVUTIL_VERSION_MICRO 10083#define LIBAVUTIL_VERSION_MICRO 100
84 84
85#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \85#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
libavutil/x86/cpu.c+6−2
@@ -150,9 +150,13 @@ int ff_get_cpu_flags_x86(void) · 149 unmodified lines
150 rval |= AV_CPU_FLAG_AVX2;150 rval |= AV_CPU_FLAG_AVX2;
151#if HAVE_AVX512 /* F, CD, BW, DQ, VL */151#if HAVE_AVX512 /* F, CD, BW, DQ, VL */
152 if ((xcr0_lo & 0xe0) == 0xe0) { /* OPMASK/ZMM state */152 if ((xcr0_lo & 0xe0) == 0xe0) { /* OPMASK/ZMM state */
153 if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000)153 if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000) {
154 rval |= AV_CPU_FLAG_AVX512;154 rval |= AV_CPU_FLAG_AVX512;
155 155#if HAVE_AVX512ICL
156 if ((ebx & 0xd0200000) == 0xd0200000 && (ecx & 0x5f42) == 0x5f42)
157 rval |= AV_CPU_FLAG_AVX512ICL;
158#endif /* HAVE_AVX512ICL */
159 }
156 }160 }
157#endif /* HAVE_AVX512 */161#endif /* HAVE_AVX512 */
158#endif /* HAVE_AVX2 */162#endif /* HAVE_AVX2 */
libavutil/x86/cpu.h+1−0
@@ -80,6 +80,7 @@ · 79 unmodified lines
80#define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX)80#define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX)
81#define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI)81#define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI)
82#define EXTERNAL_AVX512(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512)82#define EXTERNAL_AVX512(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512)
83#define EXTERNAL_AVX512ICL(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512ICL)
83 84
84#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)85#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)
85#define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT)86#define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT)
libavutil/x86/x86inc.asm+27−26
@@ -817,32 +817,33 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae, · 816 unmodified lines
817 817
818; cpuflags818; cpuflags
819 819
820%assign cpuflags_mmx (1<<0)820%assign cpuflags_mmx (1<<0)
821%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx821%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx
822%assign cpuflags_3dnow (1<<2) | cpuflags_mmx822%assign cpuflags_3dnow (1<<2) | cpuflags_mmx
823%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow823%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow
824%assign cpuflags_sse (1<<4) | cpuflags_mmx2824%assign cpuflags_sse (1<<4) | cpuflags_mmx2
825%assign cpuflags_sse2 (1<<5) | cpuflags_sse825%assign cpuflags_sse2 (1<<5) | cpuflags_sse
826%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2826%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2
827%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2827%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2
828%assign cpuflags_sse3 (1<<8) | cpuflags_sse2828%assign cpuflags_sse3 (1<<8) | cpuflags_sse2
829%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3829%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3
830%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3830%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3
831%assign cpuflags_sse42 (1<<11)| cpuflags_sse4831%assign cpuflags_sse42 (1<<11)| cpuflags_sse4
832%assign cpuflags_aesni (1<<12)| cpuflags_sse42832%assign cpuflags_aesni (1<<12)| cpuflags_sse42
833%assign cpuflags_avx (1<<13)| cpuflags_sse42833%assign cpuflags_avx (1<<13)| cpuflags_sse42
834%assign cpuflags_xop (1<<14)| cpuflags_avx834%assign cpuflags_xop (1<<14)| cpuflags_avx
835%assign cpuflags_fma4 (1<<15)| cpuflags_avx835%assign cpuflags_fma4 (1<<15)| cpuflags_avx
836%assign cpuflags_fma3 (1<<16)| cpuflags_avx836%assign cpuflags_fma3 (1<<16)| cpuflags_avx
837%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt837%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt
838%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1838%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1
839%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2839%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2
840%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL840%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL
841 841%assign cpuflags_avx512icl (1<<25)| cpuflags_avx512
842%assign cpuflags_cache32 (1<<21)842
843%assign cpuflags_cache64 (1<<22)843%assign cpuflags_cache32 (1<<21)
844%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant844%assign cpuflags_cache64 (1<<22)
845%assign cpuflags_atom (1<<24)845%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant
846%assign cpuflags_atom (1<<24)
846 847
847; Returns a boolean value expressing whether or not the specified cpuflag is enabled.848; Returns a boolean value expressing whether or not the specified cpuflag is enabled.
848%define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1)849%define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1)
tests/checkasm/checkasm.c+18−17
@@ -220,23 +220,24 @@ static const struct { · 219 unmodified lines
220 { "MMI", "mmi", AV_CPU_FLAG_MMI },220 { "MMI", "mmi", AV_CPU_FLAG_MMI },
221 { "MSA", "msa", AV_CPU_FLAG_MSA },221 { "MSA", "msa", AV_CPU_FLAG_MSA },
222#elif ARCH_X86222#elif ARCH_X86
223 { "MMX", "mmx", AV_CPU_FLAG_MMX|AV_CPU_FLAG_CMOV },223 { "MMX", "mmx", AV_CPU_FLAG_MMX|AV_CPU_FLAG_CMOV },
224 { "MMXEXT", "mmxext", AV_CPU_FLAG_MMXEXT },224 { "MMXEXT", "mmxext", AV_CPU_FLAG_MMXEXT },
225 { "3DNOW", "3dnow", AV_CPU_FLAG_3DNOW },225 { "3DNOW", "3dnow", AV_CPU_FLAG_3DNOW },
226 { "3DNOWEXT", "3dnowext", AV_CPU_FLAG_3DNOWEXT },226 { "3DNOWEXT", "3dnowext", AV_CPU_FLAG_3DNOWEXT },
227 { "SSE", "sse", AV_CPU_FLAG_SSE },227 { "SSE", "sse", AV_CPU_FLAG_SSE },
228 { "SSE2", "sse2", AV_CPU_FLAG_SSE2|AV_CPU_FLAG_SSE2SLOW },228 { "SSE2", "sse2", AV_CPU_FLAG_SSE2|AV_CPU_FLAG_SSE2SLOW },
229 { "SSE3", "sse3", AV_CPU_FLAG_SSE3|AV_CPU_FLAG_SSE3SLOW },229 { "SSE3", "sse3", AV_CPU_FLAG_SSE3|AV_CPU_FLAG_SSE3SLOW },
230 { "SSSE3", "ssse3", AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM },230 { "SSSE3", "ssse3", AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM },
231 { "SSE4.1", "sse4", AV_CPU_FLAG_SSE4 },231 { "SSE4.1", "sse4", AV_CPU_FLAG_SSE4 },
232 { "SSE4.2", "sse42", AV_CPU_FLAG_SSE42 },232 { "SSE4.2", "sse42", AV_CPU_FLAG_SSE42 },
233 { "AES-NI", "aesni", AV_CPU_FLAG_AESNI },233 { "AES-NI", "aesni", AV_CPU_FLAG_AESNI },
234 { "AVX", "avx", AV_CPU_FLAG_AVX },234 { "AVX", "avx", AV_CPU_FLAG_AVX },
235 { "XOP", "xop", AV_CPU_FLAG_XOP },235 { "XOP", "xop", AV_CPU_FLAG_XOP },
236 { "FMA3", "fma3", AV_CPU_FLAG_FMA3 },236 { "FMA3", "fma3", AV_CPU_FLAG_FMA3 },
237 { "FMA4", "fma4", AV_CPU_FLAG_FMA4 },237 { "FMA4", "fma4", AV_CPU_FLAG_FMA4 },
238 { "AVX2", "avx2", AV_CPU_FLAG_AVX2 },238 { "AVX2", "avx2", AV_CPU_FLAG_AVX2 },
239 { "AVX-512", "avx512", AV_CPU_FLAG_AVX512 },239 { "AVX-512", "avx512", AV_CPU_FLAG_AVX512 },
240 { "AVX-512ICL", "avx512icl", AV_CPU_FLAG_AVX512ICL },
240#elif ARCH_LOONGARCH241#elif ARCH_LOONGARCH
241 { "LSX", "lsx", AV_CPU_FLAG_LSX },242 { "LSX", "lsx", AV_CPU_FLAG_LSX },
242 { "LASX", "lasx", AV_CPU_FLAG_LASX },243 { "LASX", "lasx", AV_CPU_FLAG_LASX },

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t