Commit e6863ef3 authored by Erik Niemeyer's avatar Erik Niemeyer Committed by Johann

CL for adding AVX-AVX2 support in libvpx.

Change-Id: Idc03f3fca4bf2d0afd33631ea1d3caf8fc34ec29
parent 7795c191
...@@ -114,6 +114,10 @@ $(BUILD_PFX)%_ssse3.c.d: CFLAGS += -mssse3 ...@@ -114,6 +114,10 @@ $(BUILD_PFX)%_ssse3.c.d: CFLAGS += -mssse3
$(BUILD_PFX)%_ssse3.c.o: CFLAGS += -mssse3 $(BUILD_PFX)%_ssse3.c.o: CFLAGS += -mssse3
$(BUILD_PFX)%_sse4.c.d: CFLAGS += -msse4.1 $(BUILD_PFX)%_sse4.c.d: CFLAGS += -msse4.1
$(BUILD_PFX)%_sse4.c.o: CFLAGS += -msse4.1 $(BUILD_PFX)%_sse4.c.o: CFLAGS += -msse4.1
$(BUILD_PFX)%_avx.c.d: CFLAGS += -mavx
$(BUILD_PFX)%_avx.c.o: CFLAGS += -mavx
$(BUILD_PFX)%_avx2.c.d: CFLAGS += -mavx2
$(BUILD_PFX)%_avx2.c.o: CFLAGS += -mavx2
$(BUILD_PFX)%.c.d: %.c $(BUILD_PFX)%.c.d: %.c
$(if $(quiet),@echo " [DEP] $@") $(if $(quiet),@echo " [DEP] $@")
......
...@@ -1108,6 +1108,18 @@ EOF ...@@ -1108,6 +1108,18 @@ EOF
soft_enable sse4_1 soft_enable sse4_1
fi fi
if enabled gcc && ! disabled avx && ! check_cflags -mavx; then
RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx "
else
soft_enable avx
fi
if enabled gcc && ! disabled avx2 && ! check_cflags -mavx2; then
RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx2 "
else
soft_enable avx2
fi
case "${AS}" in case "${AS}" in
auto|"") auto|"")
which nasm >/dev/null 2>&1 && AS=nasm which nasm >/dev/null 2>&1 && AS=nasm
......
...@@ -327,11 +327,11 @@ EOF ...@@ -327,11 +327,11 @@ EOF
require c require c
case $arch in case $arch in
x86) x86)
ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1) ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
x86 x86
;; ;;
x86_64) x86_64)
ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1) ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
REQUIRES=${REQUIRES:-mmx sse sse2} REQUIRES=${REQUIRES:-mmx sse sse2}
require $(filter $REQUIRES) require $(filter $REQUIRES)
x86 x86
......
...@@ -234,6 +234,8 @@ ARCH_EXT_LIST=" ...@@ -234,6 +234,8 @@ ARCH_EXT_LIST="
sse3 sse3
ssse3 ssse3
sse4_1 sse4_1
avx
avx2
altivec altivec
" "
...@@ -422,7 +424,7 @@ process_targets() { ...@@ -422,7 +424,7 @@ process_targets() {
fi fi
# The write_common_config (config.mk) logic is deferred until after the # The write_common_config (config.mk) logic is deferred until after the
# recursive calls to configure complete, becuase we want our universal # recursive calls to configure complete, because we want our universal
# targets to be executed last. # targets to be executed last.
write_common_config_targets write_common_config_targets
enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk
......
...@@ -45,6 +45,10 @@ int main(int argc, char **argv) { ...@@ -45,6 +45,10 @@ int main(int argc, char **argv) {
append_gtest_filter(":-SSSE3/*"); append_gtest_filter(":-SSSE3/*");
if (!(simd_caps & HAS_SSE4_1)) if (!(simd_caps & HAS_SSE4_1))
append_gtest_filter(":-SSE4_1/*"); append_gtest_filter(":-SSE4_1/*");
if (!(simd_caps & HAS_AVX))
append_gtest_filter(":-AVX/*");
if (!(simd_caps & HAS_AVX2))
append_gtest_filter(":-AVX2/*");
#endif #endif
#if !CONFIG_SHARED #if !CONFIG_SHARED
......
...@@ -22,10 +22,11 @@ forward_decls vp9_common_forward_decls ...@@ -22,10 +22,11 @@ forward_decls vp9_common_forward_decls
# x86inc.asm doesn't work if pic is enabled on 32 bit platforms so no assembly. # x86inc.asm doesn't work if pic is enabled on 32 bit platforms so no assembly.
[ "$CONFIG_USE_X86INC" = "yes" ] && mmx_x86inc=mmx && sse_x86inc=sse && [ "$CONFIG_USE_X86INC" = "yes" ] && mmx_x86inc=mmx && sse_x86inc=sse &&
sse2_x86inc=sse2 && ssse3_x86inc=ssse3 sse2_x86inc=sse2 && ssse3_x86inc=ssse3 && avx_x86inc=avx && avx2_x86inc=avx2
# this variable is for functions that are 64 bit only. # this variable is for functions that are 64 bit only.
[ $arch = "x86_64" ] && mmx_x86_64=mmx && sse2_x86_64=sse2 && ssse3_x86_64=ssse3 [ $arch = "x86_64" ] && mmx_x86_64=mmx && sse2_x86_64=sse2 &&
ssse3_x86_64=ssse3 && avx_x86_64=avx && avx2_x86_64=avx2
# #
# RECON # RECON
......
...@@ -88,12 +88,14 @@ void __cpuid(int CPUInfo[4], int info_type); ...@@ -88,12 +88,14 @@ void __cpuid(int CPUInfo[4], int info_type);
#endif #endif
#endif /* end others */ #endif /* end others */
#define HAS_MMX 0x01 #define HAS_MMX 0x01
#define HAS_SSE 0x02 #define HAS_SSE 0x02
#define HAS_SSE2 0x04 #define HAS_SSE2 0x04
#define HAS_SSE3 0x08 #define HAS_SSE3 0x08
#define HAS_SSSE3 0x10 #define HAS_SSSE3 0x10
#define HAS_SSE4_1 0x20 #define HAS_SSE4_1 0x20
#define HAS_AVX 0x40
#define HAS_AVX2 0x80
#ifndef BIT #ifndef BIT
#define BIT(n) (1<<n) #define BIT(n) (1<<n)
#endif #endif
...@@ -132,12 +134,16 @@ x86_simd_caps(void) { ...@@ -132,12 +134,16 @@ x86_simd_caps(void) {
if (reg_edx & BIT(26)) flags |= HAS_SSE2; /* aka wmt */ if (reg_edx & BIT(26)) flags |= HAS_SSE2; /* aka wmt */
if (reg_ecx & BIT(0)) flags |= HAS_SSE3; if (reg_ecx & BIT(0)) flags |= HAS_SSE3;
if (reg_ecx & BIT(9)) flags |= HAS_SSSE3; if (reg_ecx & BIT(9)) flags |= HAS_SSSE3;
if (reg_ecx & BIT(19)) flags |= HAS_SSE4_1; if (reg_ecx & BIT(19)) flags |= HAS_SSE4_1;
if (reg_ecx & BIT(28)) flags |= HAS_AVX;
if (reg_ebx & BIT(5)) flags |= HAS_AVX2;
return flags & mask; return flags & mask;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment