diff --git a/src/System.Runtime.Intrinsics.X86/System.Runtime.Intrinsics.X86.sln b/src/System.Runtime.Intrinsics.X86/System.Runtime.Intrinsics.X86.sln
new file mode 100644
index 000000000000..1278c3d52093
--- /dev/null
+++ b/src/System.Runtime.Intrinsics.X86/System.Runtime.Intrinsics.X86.sln
@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{F8DD26AC-C306-481B-B0DA-E7D4CD4EF6D7}"
+ ProjectSection(SolutionItems) = preProject
+ ref\Configurations.props = ref\Configurations.props
+ ref\System.Runtime.Intrinsics.X86.cs = ref\System.Runtime.Intrinsics.X86.cs
+ ref\System.Runtime.Intrinsics.X86.csproj = ref\System.Runtime.Intrinsics.X86.csproj
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4F13FF59-6559-4930-B226-5610D85685CD}"
+ ProjectSection(SolutionItems) = preProject
+ src\Configurations.props = src\Configurations.props
+ src\System.Runtime.Intrinsics.X86.csproj = src\System.Runtime.Intrinsics.X86.csproj
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/System.Runtime.Intrinsics.X86/dir.props b/src/System.Runtime.Intrinsics.X86/dir.props
new file mode 100644
index 000000000000..4356decc45ef
--- /dev/null
+++ b/src/System.Runtime.Intrinsics.X86/dir.props
@@ -0,0 +1,8 @@
+
+
+
+
+ 4.0.0.0
+ Open
+
+
\ No newline at end of file
diff --git a/src/System.Runtime.Intrinsics.X86/ref/Configurations.props b/src/System.Runtime.Intrinsics.X86/ref/Configurations.props
new file mode 100644
index 000000000000..2845c11c541d
--- /dev/null
+++ b/src/System.Runtime.Intrinsics.X86/ref/Configurations.props
@@ -0,0 +1,8 @@
+
+
+
+
+ netcoreapp;
+
+
+
\ No newline at end of file
diff --git a/src/System.Runtime.Intrinsics.X86/ref/System.Runtime.Intrinsics.X86.cs b/src/System.Runtime.Intrinsics.X86/ref/System.Runtime.Intrinsics.X86.cs
new file mode 100644
index 000000000000..c9f0274438bb
--- /dev/null
+++ b/src/System.Runtime.Intrinsics.X86/ref/System.Runtime.Intrinsics.X86.cs
@@ -0,0 +1,1204 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+// ------------------------------------------------------------------------------
+// Changes to this file must follow the http://aka.ms/api-review process.
+// ------------------------------------------------------------------------------
+
+using System.Runtime.InteropServices;
+
+namespace System.Runtime.Intrinsics
+{
+ [StructLayout(LayoutKind.Sequential, Size = 16)]
+ public struct Vector128 where T : struct {}
+ [StructLayout(LayoutKind.Sequential, Size = 32)]
+ public struct Vector256 where T : struct {}
+}
+
+namespace System.Runtime.Intrinsics.X86
+{
+ public static class Aes
+ {
+ public static bool IsSupported { get { throw null; } }
+ public static Vector128 Decrypt(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 Decrypt(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 DecryptLast(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 DecryptLast(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 Encrypt(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 Encrypt(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 EncryptLast(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 EncryptLast(Vector128 value, Vector128 roundKey) { throw null; }
+ public static Vector128 InvisibleMixColumn(Vector128 value) { throw null; }
+ public static Vector128 InvisibleMixColumn(Vector128 value) { throw null; }
+ public static Vector128 KeygenAssist(Vector128 value, byte control) { throw null; }
+ public static Vector128 KeygenAssist(Vector128 value, byte control) { throw null; }
+ }
+ public static class Avx
+ {
+ public static bool IsSupported { get { throw null; } }
+ public static Vector256 Add(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 Add(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 AddSubtract(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 AddSubtract(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 And(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 And(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 AndNot(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 AndNot(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 Blend(Vector256 left, Vector256 right, byte control) { throw null; }
+ public static Vector256 Blend(Vector256 left, Vector256 right, byte control) { throw null; }
+ public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) { throw null; }
+ public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) { throw null; }
+ public static Vector128 BroadcastElementToVector128(ref float source) { throw null; }
+ public static unsafe Vector256 BroadcastVector128ToVector256(float* address) { throw null; }
+ public static Vector256 BroadcastElementToVector256(ref float source) { throw null; }
+ public static unsafe Vector256 BroadcastVector128ToVector256(double* address) { throw null; }
+ public static Vector256 BroadcastElementToVector256(ref double source) { throw null; }
+ public static Vector256 Ceiling(Vector256 value) { throw null; }
+ public static Vector256 Ceiling(Vector256 value) { throw null; }
+ public static Vector128 Compare(Vector128 left, Vector128 right, FloatComparisonMode mode) { throw null; }
+ public static Vector128 Compare(Vector128 left, Vector128 right, FloatComparisonMode mode) { throw null; }
+ public static Vector256 Compare(Vector256 left, Vector256 right, FloatComparisonMode mode) { throw null; }
+ public static Vector256 Compare(Vector256 left, Vector256 right, FloatComparisonMode mode) { throw null; }
+ public static Vector128 ConvertToVector128Int(Vector256 value) { throw null; }
+ public static Vector128 ConvertToVector128Float(Vector256 value) { throw null; }
+ public static Vector256 ConvertToVector256Int(Vector256 value) { throw null; }
+ public static Vector256 ConvertToVector256Float(Vector256 value) { throw null; }
+ public static Vector256 ConvertToVector256Double(Vector256 value) { throw null; }
+ public static Vector256 ConvertToVector256Double(Vector256 value) { throw null; }
+ public static Vector128 ConvertToVector128IntWithTruncation(Vector256 value) { throw null; }
+ public static Vector256 ConvertToVector256IntWithTruncation(Vector256 value) { throw null; }
+ public static Vector256 Divide(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 Divide(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 DotProduct(Vector256 left, Vector256 right, byte control) { throw null; }
+ public static Vector256 DuplicateEvenIndexed(Vector256 value) { throw null; }
+ public static Vector256 DuplicateEvenIndexed(Vector256 value) { throw null; }
+ public static Vector256 DuplicateOddIndexed(Vector256 value) { throw null; }
+ public static sbyte ExtractSbyte(Vector256 value, byte index) where T : struct { throw null; }
+ public static byte ExtractByte(Vector256 value, byte index) where T : struct { throw null; }
+ public static short ExtractShort(Vector256 value, byte index) where T : struct { throw null; }
+ public static ushort ExtractUshort(Vector256 value, byte index) where T : struct { throw null; }
+ public static int ExtractInt(Vector256 value, byte index) where T : struct { throw null; }
+ public static uint ExtractUint(Vector256 value, byte index) where T : struct { throw null; }
+ public static long ExtractLong(Vector256 value, byte index) where T : struct { throw null; }
+ public static ulong ExtractUlong(Vector256 value, byte index) where T : struct { throw null; }
+ public static Vector128 ExtractVector128(Vector256 value, byte index) where T : struct { throw null; }
+ public static unsafe void ExtractVector128(byte* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(sbyte* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(short* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(ushort* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(int* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(uint* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(long* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(ulong* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(float* address, Vector256 value, byte index) { throw null; }
+ public static unsafe void ExtractVector128(double* address, Vector256 value, byte index) { throw null; }
+ public static Vector256 ExtendToVector256(Vector128 value) where T : struct { throw null; }
+ public static Vector256 Floor(Vector256 value) { throw null; }
+ public static Vector256 Floor(Vector256 value) { throw null; }
+ public static Vector128 GetLowerHalf(Vector256 value) where T : struct { throw null; }
+ public static Vector256 HorizontalAdd(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 HorizontalAdd(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 HorizontalSubtract(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 HorizontalSubtract(Vector256 left, Vector256 right) { throw null; }
+ public static Vector256 InsertSbyte(Vector256 value, sbyte data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertByte(Vector256 value, byte data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertShort(Vector256 value, short data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertUshort(Vector256 value, ushort data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertInt(Vector256 value, int data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertUint(Vector256 value, uint data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertLong(Vector256 value, long data, byte index) where T : struct { throw null; }
+ public static Vector256 InsertUlong(Vector256 value, ulong data, byte index) where T : struct { throw null; }
+ public static Vector256 Insert(Vector256 value, Vector128 data, byte index) where T : struct { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, sbyte* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, byte* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, short* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, ushort* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, int* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, uint* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, long* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, ulong* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, float* address, byte index) { throw null; }
+ public static unsafe Vector256 Insert(Vector256 value, double* address, byte index) { throw null; }
+ public static unsafe Vector256 Load(sbyte* address) { throw null; }
+ public static unsafe Vector256 Load(byte* address) { throw null; }
+ public static unsafe Vector256 Load(short* address) { throw null; }
+ public static unsafe Vector256 Load(ushort* address) { throw null; }
+ public static unsafe Vector256 Load(int* address) { throw null; }
+ public static unsafe Vector256 Load(uint* address) { throw null; }
+ public static unsafe Vector256 Load(long* address) { throw null; }
+ public static unsafe Vector256 Load(ulong* address) { throw null; }
+ public static unsafe Vector256 Load(float* address) { throw null; }
+ public static unsafe Vector256 Load(double* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(sbyte* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(byte* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(short* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(ushort* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(int* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(uint* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(long* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(ulong* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(float* address) { throw null; }
+ public static unsafe Vector256 LoadAligned(double* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(sbyte* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(byte* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(short* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(ushort* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(int* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(uint* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(long* address) { throw null; }
+ public static unsafe Vector256 LoadDqu(ulong* address) { throw null; }
+ public static unsafe Vector128 MaskLoad(float* address, Vector128 mask) { throw null; }
+ public static unsafe Vector128 MaskLoad(double* address, Vector128