History

lavu: add AESNI CPU flag

Rodger Combs committed 11 years ago

Commit 1e477a91 parent 057ce759 files · +26 −7Browse files

Unified · Split

9 files
  1. configure +4 −0
  2. doc/APIchanges +3 −0
  3. libavutil/cpu.c +4 −0
  4. libavutil/cpu.h +1 −0
  5. libavutil/version.h +1 −1
  6. libavutil/x86/cpu.c +2 −0
  7. libavutil/x86/cpu.h +3 −0
  8. libavutil/x86/x86inc.asm +7 −6
  9. tests/checkasm/checkasm.c +1 −0
configure+4−0
@@ -368,6 +368,7 @@ Optimization options (experts only): · 367 unmodified lines
368 --disable-fma3 disable FMA3 optimizations368 --disable-fma3 disable FMA3 optimizations
369 --disable-fma4 disable FMA4 optimizations369 --disable-fma4 disable FMA4 optimizations
370 --disable-avx2 disable AVX2 optimizations370 --disable-avx2 disable AVX2 optimizations
371 --disable-aesni disable AESNI optimizations
371 --disable-armv5te disable armv5te optimizations372 --disable-armv5te disable armv5te optimizations
372 --disable-armv6 disable armv6 optimizations373 --disable-armv6 disable armv6 optimizations
373 --disable-armv6t2 disable armv6t2 optimizations374 --disable-armv6t2 disable armv6t2 optimizations
@@ -1635,6 +1636,7 @@ ARCH_EXT_LIST_LOONGSON=" · 1261 unmodified lines
1635"1636"
1636 1637
1637ARCH_EXT_LIST_X86_SIMD="1638ARCH_EXT_LIST_X86_SIMD="
1639 aesni
1638 amd3dnow1640 amd3dnow
1639 amd3dnowext1641 amd3dnowext
1640 avx1642 avx
@@ -2128,6 +2130,7 @@ sse3_deps="sse2" · 487 unmodified lines
2128ssse3_deps="sse3"2130ssse3_deps="sse3"
2129sse4_deps="ssse3"2131sse4_deps="ssse3"
2130sse42_deps="sse4"2132sse42_deps="sse4"
2133aesni_deps="sse42"
2131avx_deps="sse42"2134avx_deps="sse42"
2132xop_deps="avx"2135xop_deps="avx"
2133fma3_deps="avx"2136fma3_deps="avx"
@@ -6011,6 +6014,7 @@ if enabled x86; then · 3877 unmodified lines
6011 echo "3DNow! extended enabled ${amd3dnowext-no}"6014 echo "3DNow! extended enabled ${amd3dnowext-no}"
6012 echo "SSE enabled ${sse-no}"6015 echo "SSE enabled ${sse-no}"
6013 echo "SSSE3 enabled ${ssse3-no}"6016 echo "SSSE3 enabled ${ssse3-no}"
6017 echo "AESNI enabled ${aesni-no}"
6014 echo "AVX enabled ${avx-no}"6018 echo "AVX enabled ${avx-no}"
6015 echo "XOP enabled ${xop-no}"6019 echo "XOP enabled ${xop-no}"
6016 echo "FMA3 enabled ${fma3-no}"6020 echo "FMA3 enabled ${fma3-no}"
doc/APIchanges+3−0
@@ -15,6 +15,9 @@ libavutil: 2015-08-28 · 14 unmodified lines
15 15
16API changes, most recent first:16API changes, most recent first:
17 17
182015-10-27 - xxxxxxx - lavu 55.5.100 - cpu.h
19 Add AV_CPU_FLAG_AESNI.
20
182015-10-27 - xxxxxxx - lavc 57.12.100 / 57.8.0 - avcodec.h212015-10-27 - xxxxxxx - lavc 57.12.100 / 57.8.0 - avcodec.h
19 Deprecate av_free_packet(). Use av_packet_unref() as replacement,22 Deprecate av_free_packet(). Use av_packet_unref() as replacement,
20 it resets the packet in a more consistent way.23 it resets the packet in a more consistent way.
libavutil/cpu.c+4−0
@@ -118,6 +118,7 @@ int av_parse_cpu_flags(const char *s) · 117 unmodified lines
118#define CPUFLAG_FMA4 (AV_CPU_FLAG_FMA4 | CPUFLAG_AVX)118#define CPUFLAG_FMA4 (AV_CPU_FLAG_FMA4 | CPUFLAG_AVX)
119#define CPUFLAG_AVX2 (AV_CPU_FLAG_AVX2 | CPUFLAG_AVX)119#define CPUFLAG_AVX2 (AV_CPU_FLAG_AVX2 | CPUFLAG_AVX)
120#define CPUFLAG_BMI2 (AV_CPU_FLAG_BMI2 | AV_CPU_FLAG_BMI1)120#define CPUFLAG_BMI2 (AV_CPU_FLAG_BMI2 | AV_CPU_FLAG_BMI1)
121#define CPUFLAG_AESNI (AV_CPU_FLAG_AESNI | CPUFLAG_SSE42)
121 static const AVOption cpuflags_opts[] = {122 static const AVOption cpuflags_opts[] = {
122 { "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },123 { "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },
123#if ARCH_PPC124#if ARCH_PPC
@@ -145,6 +146,7 @@ int av_parse_cpu_flags(const char *s) · 21 unmodified lines
145 { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOW }, .unit = "flags" },146 { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOW }, .unit = "flags" },
146 { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOWEXT }, .unit = "flags" },147 { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOWEXT }, .unit = "flags" },
147 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },148 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },
149 { "aesni" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AESNI }, .unit = "flags" },
148#elif ARCH_ARM150#elif ARCH_ARM
149 { "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV5TE }, .unit = "flags" },151 { "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV5TE }, .unit = "flags" },
150 { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" },152 { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" },
@@ -205,6 +207,7 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) · 54 unmodified lines
205 { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_3DNOW }, .unit = "flags" },207 { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_3DNOW }, .unit = "flags" },
206 { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_3DNOWEXT }, .unit = "flags" },208 { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_3DNOWEXT }, .unit = "flags" },
207 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },209 { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" },
210 { "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" },
208 211
209#define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX212#define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX
210#define CPU_FLAG_P3 CPU_FLAG_P2 | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE213#define CPU_FLAG_P3 CPU_FLAG_P2 | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE
@@ -340,6 +343,7 @@ static const struct { · 129 unmodified lines
340 { AV_CPU_FLAG_AVX2, "avx2" },343 { AV_CPU_FLAG_AVX2, "avx2" },
341 { AV_CPU_FLAG_BMI1, "bmi1" },344 { AV_CPU_FLAG_BMI1, "bmi1" },
342 { AV_CPU_FLAG_BMI2, "bmi2" },345 { AV_CPU_FLAG_BMI2, "bmi2" },
346 { AV_CPU_FLAG_AESNI, "aesni" },
343#endif347#endif
344 { 0 }348 { 0 }
345};349};
libavutil/cpu.h+1−0
@@ -42,6 +42,7 @@ · 41 unmodified lines
42#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower42#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
43#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions43#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
44#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions44#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
45#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions
45#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used46#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
46#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer)47#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer)
47#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions48#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions
libavutil/version.h+1−1
@@ -56,7 +56,7 @@ · 55 unmodified lines
56 */56 */
57 57
58#define LIBAVUTIL_VERSION_MAJOR 5558#define LIBAVUTIL_VERSION_MAJOR 55
59#define LIBAVUTIL_VERSION_MINOR 459#define LIBAVUTIL_VERSION_MINOR 5
60#define LIBAVUTIL_VERSION_MICRO 10060#define LIBAVUTIL_VERSION_MICRO 100
61 61
62#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \62#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
libavutil/x86/cpu.c+2−0
@@ -126,6 +126,8 @@ int ff_get_cpu_flags_x86(void) · 125 unmodified lines
126 rval |= AV_CPU_FLAG_SSE4;126 rval |= AV_CPU_FLAG_SSE4;
127 if (ecx & 0x00100000 )127 if (ecx & 0x00100000 )
128 rval |= AV_CPU_FLAG_SSE42;128 rval |= AV_CPU_FLAG_SSE42;
129 if (ecx & 0x01000000 )
130 rval |= AV_CPU_FLAG_AESNI;
129#if HAVE_AVX131#if HAVE_AVX
130 /* Check OXSAVE and AVX bits */132 /* Check OXSAVE and AVX bits */
131 if ((ecx & 0x18000000) == 0x18000000) {133 if ((ecx & 0x18000000) == 0x18000000) {
libavutil/x86/cpu.h+3−0
@@ -47,6 +47,7 @@ · 46 unmodified lines
47#define X86_FMA3(flags) CPUEXT(flags, FMA3)47#define X86_FMA3(flags) CPUEXT(flags, FMA3)
48#define X86_FMA4(flags) CPUEXT(flags, FMA4)48#define X86_FMA4(flags) CPUEXT(flags, FMA4)
49#define X86_AVX2(flags) CPUEXT(flags, AVX2)49#define X86_AVX2(flags) CPUEXT(flags, AVX2)
50#define X86_AESNI(flags) CPUEXT(flags, AESNI)
50 51
51#define EXTERNAL_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOW)52#define EXTERNAL_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOW)
52#define EXTERNAL_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOWEXT)53#define EXTERNAL_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AMD3DNOWEXT)
@@ -69,6 +70,7 @@ · 16 unmodified lines
69#define EXTERNAL_FMA3(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA3)70#define EXTERNAL_FMA3(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA3)
70#define EXTERNAL_FMA4(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA4)71#define EXTERNAL_FMA4(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA4)
71#define EXTERNAL_AVX2(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX2)72#define EXTERNAL_AVX2(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX2)
73#define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI)
72 74
73#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)75#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)
74#define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT)76#define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT)
@@ -91,6 +93,7 @@ · 16 unmodified lines
91#define INLINE_FMA3(flags) CPUEXT_SUFFIX(flags, _INLINE, FMA3)93#define INLINE_FMA3(flags) CPUEXT_SUFFIX(flags, _INLINE, FMA3)
92#define INLINE_FMA4(flags) CPUEXT_SUFFIX(flags, _INLINE, FMA4)94#define INLINE_FMA4(flags) CPUEXT_SUFFIX(flags, _INLINE, FMA4)
93#define INLINE_AVX2(flags) CPUEXT_SUFFIX(flags, _INLINE, AVX2)95#define INLINE_AVX2(flags) CPUEXT_SUFFIX(flags, _INLINE, AVX2)
96#define INLINE_AESNI(flags) CPUEXT_SUFFIX(flags, _INLINE, AESNI)
94 97
95void ff_cpu_cpuid(int index, int *eax, int *ebx, int *ecx, int *edx);98void ff_cpu_cpuid(int index, int *eax, int *ebx, int *ecx, int *edx);
96void ff_cpu_xgetbv(int op, int *eax, int *edx);99void ff_cpu_xgetbv(int op, int *eax, int *edx);
libavutil/x86/x86inc.asm+7−6
@@ -772,6 +772,7 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae, · 771 unmodified lines
772%assign cpuflags_atom (1<<21)772%assign cpuflags_atom (1<<21)
773%assign cpuflags_bmi1 (1<<22)|cpuflags_lzcnt773%assign cpuflags_bmi1 (1<<22)|cpuflags_lzcnt
774%assign cpuflags_bmi2 (1<<23)|cpuflags_bmi1774%assign cpuflags_bmi2 (1<<23)|cpuflags_bmi1
775%assign cpuflags_aesni (1<<24)|cpuflags_sse42
775 776
776; Returns a boolean value expressing whether or not the specified cpuflag is enabled.777; Returns a boolean value expressing whether or not the specified cpuflag is enabled.
777%define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1)778%define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1)
@@ -1171,12 +1172,12 @@ AVX_INSTR addsd, sse2, 1, 0, 1 · 393 unmodified lines
1171AVX_INSTR addss, sse, 1, 0, 11172AVX_INSTR addss, sse, 1, 0, 1
1172AVX_INSTR addsubpd, sse3, 1, 0, 01173AVX_INSTR addsubpd, sse3, 1, 0, 0
1173AVX_INSTR addsubps, sse3, 1, 0, 01174AVX_INSTR addsubps, sse3, 1, 0, 0
1174AVX_INSTR aesdec, fnord, 0, 0, 01175AVX_INSTR aesdec, aesni, 0, 0, 0
1175AVX_INSTR aesdeclast, fnord, 0, 0, 01176AVX_INSTR aesdeclast, aesni, 0, 0, 0
1176AVX_INSTR aesenc, fnord, 0, 0, 01177AVX_INSTR aesenc, aesni, 0, 0, 0
1177AVX_INSTR aesenclast, fnord, 0, 0, 01178AVX_INSTR aesenclast, aesni, 0, 0, 0
1178AVX_INSTR aesimc1179AVX_INSTR aesimc, aesni
1179AVX_INSTR aeskeygenassist1180AVX_INSTR aeskeygenassist, aesni
1180AVX_INSTR andnpd, sse2, 1, 0, 01181AVX_INSTR andnpd, sse2, 1, 0, 0
1181AVX_INSTR andnps, sse, 1, 0, 01182AVX_INSTR andnps, sse, 1, 0, 0
1182AVX_INSTR andpd, sse2, 1, 0, 11183AVX_INSTR andpd, sse2, 1, 0, 1
tests/checkasm/checkasm.c+1−0
@@ -117,6 +117,7 @@ static const struct { · 116 unmodified lines
117 { "SSSE3", "ssse3", AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM },117 { "SSSE3", "ssse3", AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM },
118 { "SSE4.1", "sse4", AV_CPU_FLAG_SSE4 },118 { "SSE4.1", "sse4", AV_CPU_FLAG_SSE4 },
119 { "SSE4.2", "sse42", AV_CPU_FLAG_SSE42 },119 { "SSE4.2", "sse42", AV_CPU_FLAG_SSE42 },
120 { "AES-NI", "aesni", AV_CPU_FLAG_AESNI },
120 { "AVX", "avx", AV_CPU_FLAG_AVX },121 { "AVX", "avx", AV_CPU_FLAG_AVX },
121 { "XOP", "xop", AV_CPU_FLAG_XOP },122 { "XOP", "xop", AV_CPU_FLAG_XOP },
122 { "FMA3", "fma3", AV_CPU_FLAG_FMA3 },123 { "FMA3", "fma3", AV_CPU_FLAG_FMA3 },

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