Fix vs2015 compiling error on avx2 intrinsics
BUG=aomedia:900
Change-Id: Ifb6c437d8d2f309d0717fb50c402618475fe021f
diff --git a/aom_dsp/x86/highbd_intrapred_avx2.c b/aom_dsp/x86/highbd_intrapred_avx2.c
index 41b55c9..e001a1d 100644
--- a/aom_dsp/x86/highbd_intrapred_avx2.c
+++ b/aom_dsp/x86/highbd_intrapred_avx2.c
@@ -11,6 +11,7 @@
#include <immintrin.h>
+#include "aom_ports/msvc.h"
#include "./aom_dsp_rtcd.h"
// -----------------------------------------------------------------------------
diff --git a/aom_ports/msvc.h b/aom_ports/msvc.h
index 2d3ab9b..5a41d29 100644
--- a/aom_ports/msvc.h
+++ b/aom_ports/msvc.h
@@ -43,5 +43,25 @@
}
#endif // _MSC_VER < 1800
+#if HAVE_AVX
+#include <immintrin.h>
+// Note:
+// _mm256_insert_epi16 intrinsics is available from vs2017.
+// We define this macro for vs2015 and earlier. The
+// intrinsics used here are in vs2015 document:
+// https://msdn.microsoft.com/en-us/library/hh977022.aspx
+// Input parameters:
+// a: __m256i,
+// d: int16_t,
+// indx: imm8 (0 - 15)
+#if _MSC_VER <= 1900
+#define _mm256_insert_epi16(a, d, indx) \
+ _mm256_insertf128_si256( \
+ a, \
+ _mm_insert_epi16(_mm256_extractf128_si256(a, indx >> 3), d, indx % 8), \
+ indx >> 3)
+#endif // _MSC_VER <= 1900
+#endif // HAVE_AVX
+
#endif // _MSC_VER
#endif // AOM_PORTS_MSVC_H_