Skip to content

Commit 8b81eab

Browse files
JDarnleyJames Darnley
authored and
James Darnley
committed
avutil: add AVX-512 flags
1 parent b7a3d1f commit 8b81eab

File tree

7 files changed

+14
-2
lines changed

7 files changed

+14
-2
lines changed

Changelog

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ version <next>:
2727
- video setrange filter
2828
- nsp demuxer
2929
- support LibreSSL (via libtls)
30+
- AVX-512/ZMM support added
3031

3132

3233
version 3.4:

doc/APIchanges

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ libavutil: 2017-10-21
1515

1616
API changes, most recent first:
1717

18+
2017-12-xx - xxxxxxx - lavu 56.7.100 - cpu.h
19+
AVX-512 flags added.
20+
1821
2017-xx-xx - xxxxxxx - lavc 58.8.100 - avcodec.h
1922
The MediaCodec decoders now support AVCodecContext.hw_device_ctx.
2023

libavutil/cpu.c

+5-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ void av_force_cpu_flags(int arg){
8080
AV_CPU_FLAG_XOP |
8181
AV_CPU_FLAG_FMA3 |
8282
AV_CPU_FLAG_FMA4 |
83-
AV_CPU_FLAG_AVX2 ))
83+
AV_CPU_FLAG_AVX2 |
84+
AV_CPU_FLAG_AVX512 ))
8485
&& !(arg & AV_CPU_FLAG_MMX)) {
8586
av_log(NULL, AV_LOG_WARNING, "MMX implied by specified flags\n");
8687
arg |= AV_CPU_FLAG_MMX;
@@ -126,6 +127,7 @@ int av_parse_cpu_flags(const char *s)
126127
#define CPUFLAG_AVX2 (AV_CPU_FLAG_AVX2 | CPUFLAG_AVX)
127128
#define CPUFLAG_BMI2 (AV_CPU_FLAG_BMI2 | AV_CPU_FLAG_BMI1)
128129
#define CPUFLAG_AESNI (AV_CPU_FLAG_AESNI | CPUFLAG_SSE42)
130+
#define CPUFLAG_AVX512 (AV_CPU_FLAG_AVX512 | CPUFLAG_AVX2)
129131
static const AVOption cpuflags_opts[] = {
130132
{ "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },
131133
#if ARCH_PPC
@@ -154,6 +156,7 @@ int av_parse_cpu_flags(const char *s)
154156
{ "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOWEXT }, .unit = "flags" },
155157
{ "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },
156158
{ "aesni" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AESNI }, .unit = "flags" },
159+
{ "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX512 }, .unit = "flags" },
157160
#elif ARCH_ARM
158161
{ "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV5TE }, .unit = "flags" },
159162
{ "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" },
@@ -216,6 +219,7 @@ int av_parse_cpu_caps(unsigned *flags, const char *s)
216219
{ "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_3DNOWEXT }, .unit = "flags" },
217220
{ "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },
218221
{ "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" },
222+
{ "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512 }, .unit = "flags" },
219223

220224
#define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX
221225
#define CPU_FLAG_P3 CPU_FLAG_P2 | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE

libavutil/cpu.h

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions
5656
#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
5757
#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
58+
#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
5859

5960
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
6061
#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06

libavutil/tests/cpu.c

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ static const struct {
7373
{ AV_CPU_FLAG_BMI1, "bmi1" },
7474
{ AV_CPU_FLAG_BMI2, "bmi2" },
7575
{ AV_CPU_FLAG_AESNI, "aesni" },
76+
{ AV_CPU_FLAG_AVX512, "avx512" },
7677
#endif
7778
{ 0 }
7879
};

libavutil/version.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
*/
8080

8181
#define LIBAVUTIL_VERSION_MAJOR 56
82-
#define LIBAVUTIL_VERSION_MINOR 6
82+
#define LIBAVUTIL_VERSION_MINOR 7
8383
#define LIBAVUTIL_VERSION_MICRO 100
8484

8585
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

libavutil/x86/cpu.h

+2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#define X86_FMA4(flags) CPUEXT(flags, FMA4)
5151
#define X86_AVX2(flags) CPUEXT(flags, AVX2)
5252
#define X86_AESNI(flags) CPUEXT(flags, AESNI)
53+
#define X86_AVX512(flags) CPUEXT(flags, AVX512)
5354

5455
#define EXTERNAL_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOW)
5556
#define EXTERNAL_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOWEXT)
@@ -79,6 +80,7 @@
7980
#define EXTERNAL_AVX2_FAST(flags) CPUEXT_SUFFIX_FAST2(flags, _EXTERNAL, AVX2, AVX)
8081
#define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX)
8182
#define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI)
83+
#define EXTERNAL_AVX512(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512)
8284

8385
#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)
8486
#define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT)

0 commit comments

Comments
 (0)