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_