diff options
| author | bors <bors@rust-lang.org> | 2016-03-14 00:30:53 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-03-14 00:30:53 -0700 |
| commit | 170f4708bb48234a2f1a089342b31a424ac94fa9 (patch) | |
| tree | 0f8f20a165984d541ded4539a52c60f23b8ac578 /src | |
| parent | 211296ddabb6a307a0f60af1cb93f39b85ba5bbd (diff) | |
| parent | a394d50490bc1f73afeed1d408f6153d267851b2 (diff) | |
| download | rust-170f4708bb48234a2f1a089342b31a424ac94fa9.tar.gz rust-170f4708bb48234a2f1a089342b31a424ac94fa9.zip | |
Auto merge of #32231 - ruud-v-a:avx-cmp-blend, r=alexcrichton
Define AVX compare and blend intrinsics This defines the following intrinsics: * `_mm256_blendv_pd` * `_mm256_blendv_ps` * `_mm256_cmp_pd` * `_mm256_cmp_ps` I verified these locally.
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc/platform-intrinsics/x86/avx.json | 14 | ||||
| -rw-r--r-- | src/librustc_platform_intrinsics/x86.rs | 20 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/etc/platform-intrinsics/x86/avx.json b/src/etc/platform-intrinsics/x86/avx.json index 08524fbd6dd..05a4721aed8 100644 --- a/src/etc/platform-intrinsics/x86/avx.json +++ b/src/etc/platform-intrinsics/x86/avx.json @@ -9,6 +9,13 @@ "args": ["0", "0"] }, { + "intrinsic": "256_blendv_{0.data_type}", + "width": [256], + "llvm": "blendv.{0.data_type}.256", + "ret": "f(32-64)", + "args": ["0", "0", "0"] + }, + { "intrinsic": "256_broadcast_{0.data_type}", "width": [256], "llvm": "vbroadcastf128.{0.data_type}.256", @@ -16,6 +23,13 @@ "args": ["s8SPc"] }, { + "intrinsic": "256_cmp_{0.data_type}", + "width": [256], + "llvm": "cmp.{1.data_type}.256", + "ret": "f(32-64)", + "args": ["0", "0", "s8S"] + }, + { "intrinsic": "256_cvtepi32_pd", "width": [256], "llvm": "cvtdq2.pd.256", diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs index d8aaf151267..c5d3e414c7c 100644 --- a/src/librustc_platform_intrinsics/x86.rs +++ b/src/librustc_platform_intrinsics/x86.rs @@ -498,6 +498,16 @@ pub fn find<'tcx>(_tcx: &TyCtxt<'tcx>, name: &str) -> Option<Intrinsic> { output: v(f(64), 4), definition: Named("llvm.x86.avx.addsub.pd.256") }, + "256_blendv_ps" => Intrinsic { + inputs: vec![v(f(32), 8), v(f(32), 8), v(f(32), 8)], + output: v(f(32), 8), + definition: Named("llvm.x86.avx.blendv.ps.256") + }, + "256_blendv_pd" => Intrinsic { + inputs: vec![v(f(64), 4), v(f(64), 4), v(f(64), 4)], + output: v(f(64), 4), + definition: Named("llvm.x86.avx.blendv.pd.256") + }, "256_broadcast_ps" => Intrinsic { inputs: vec![p(true, i(8), None)], output: v(f(32), 8), @@ -508,6 +518,16 @@ pub fn find<'tcx>(_tcx: &TyCtxt<'tcx>, name: &str) -> Option<Intrinsic> { output: v(f(64), 4), definition: Named("llvm.x86.avx.vbroadcastf128.pd.256") }, + "256_cmp_ps" => Intrinsic { + inputs: vec![v(f(32), 8), v(f(32), 8), i(8)], + output: v(f(32), 8), + definition: Named("llvm.x86.avx.cmp.ps.256") + }, + "256_cmp_pd" => Intrinsic { + inputs: vec![v(f(64), 4), v(f(64), 4), i(8)], + output: v(f(64), 4), + definition: Named("llvm.x86.avx.cmp.pd.256") + }, "256_cvtepi32_pd" => Intrinsic { inputs: vec![v(i(32), 4)], output: v(f(64), 4), |
