]> git.lizzy.rs Git - rust.git/commitdiff
Add support for PowerPC Altivec/VSX intrinsics
authorLuca Barbato <lu_zero@gentoo.org>
Mon, 24 Jul 2017 00:23:24 +0000 (00:23 +0000)
committerLuca Barbato <lu_zero@gentoo.org>
Mon, 24 Jul 2017 09:08:20 +0000 (09:08 +0000)
src/etc/platform-intrinsics/powerpc.json [new file with mode: 0644]
src/librustc_platform_intrinsics/lib.rs
src/librustc_platform_intrinsics/powerpc.rs [new file with mode: 0644]

diff --git a/src/etc/platform-intrinsics/powerpc.json b/src/etc/platform-intrinsics/powerpc.json
new file mode 100644 (file)
index 0000000..5a7e986
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "platform": "powerpc",
+    "intrinsic_prefix": "_vec_",
+    "llvm_prefix": "llvm.ppc.altivec.",
+    "number_info": {
+        "unsigned": {},
+        "signed": {}
+    },
+    "width_info": {
+        "128": { "width": "" }
+    },
+    "intrinsics": [
+        {
+            "intrinsic": "perm",
+            "width": [128],
+            "llvm": "vperm",
+            "ret": "s32",
+            "args": ["0", "0", "s8"]
+        }
+    ]
+}
index 347708a4f9baddd31531a5488711ae99e8a00f04..ef1d9093df20e7bfcb6bf821eafb2d7e125c9985 100644 (file)
@@ -113,6 +113,7 @@ pub enum IntrinsicDef {
 mod aarch64;
 mod nvptx;
 mod hexagon;
+mod powerpc;
 
 impl Intrinsic {
     pub fn find(name: &str) -> Option<Intrinsic> {
@@ -126,6 +127,8 @@ pub fn find(name: &str) -> Option<Intrinsic> {
             nvptx::find(name)
         } else if name.starts_with("Q6_") {
             hexagon::find(name)
+        } else if name.starts_with("powerpc_") {
+            powerpc::find(name)
         } else {
             None
         }
diff --git a/src/librustc_platform_intrinsics/powerpc.rs b/src/librustc_platform_intrinsics/powerpc.rs
new file mode 100644 (file)
index 0000000..31b642b
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
+// ignore-tidy-linelength
+
+#![allow(unused_imports)]
+
+use {Intrinsic, Type};
+use IntrinsicDef::Named;
+
+// The default inlining settings trigger a pathological behaviour in
+// LLVM, which causes makes compilation very slow. See #28273.
+#[inline(never)]
+pub fn find(name: &str) -> Option<Intrinsic> {
+    if !name.starts_with("powerpc") { return None }
+    Some(match &name["powerpc".len()..] {
+        "_vec_perm" => Intrinsic {
+            inputs: { static INPUTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I8x16]; &INPUTS },
+            output: &::I32x4,
+            definition: Named("llvm.ppc.altivec.vperm")
+        },
+        _ => return None,
+    })
+}