]> git.lizzy.rs Git - rust.git/commitdiff
Allow different instruction set prefixes within the same architecture
authorgnzlbg <gonzalobg88@gmail.com>
Wed, 22 Jun 2016 13:47:49 +0000 (15:47 +0200)
committergnzlbg <gonzalobg88@gmail.com>
Wed, 22 Jun 2016 14:30:55 +0000 (16:30 +0200)
13 files changed:
src/etc/platform-intrinsics/aarch64.json
src/etc/platform-intrinsics/arm.json
src/etc/platform-intrinsics/generator.py
src/etc/platform-intrinsics/x86/avx.json
src/etc/platform-intrinsics/x86/avx2.json
src/etc/platform-intrinsics/x86/fma.json
src/etc/platform-intrinsics/x86/info.json
src/etc/platform-intrinsics/x86/sse.json
src/etc/platform-intrinsics/x86/sse2.json
src/etc/platform-intrinsics/x86/sse3.json
src/etc/platform-intrinsics/x86/sse41.json
src/etc/platform-intrinsics/x86/sse42.json
src/etc/platform-intrinsics/x86/ssse3.json

index 79fd7699428895bf2191ba22f4bc1a062919c38a..c8cda4077b79075b4d32a3db7bddcab04b5d4dfd 100644 (file)
@@ -1,6 +1,6 @@
 {
-    "platform": "aarch64",
-    "intrinsic_prefix": "aarch64_v",
+    "platform": "aarch64_v",
+    "intrinsic_prefix": "",
     "llvm_prefix": "llvm.aarch64.neon.",
     "number_info": {
         "signed": {
index 97db7cbb3e0a52fce179bc7c904e4fc460844bba..39e49e239f34dfcc64e67a71933a0f89ec4037ed 100644 (file)
@@ -1,6 +1,6 @@
 {
-    "platform": "arm",
-    "intrinsic_prefix": "arm_v",
+    "platform": "arm_v",
+    "intrinsic_prefix": "",
     "llvm_prefix": "llvm.neon.v",
     "number_info": {
         "signed": {
index 2f2313d84ac6683c176b624a48bd0a1e6bca46fb..d2f40f167142904d3f947d19e6f89981907bb274 100644 (file)
@@ -26,18 +26,19 @@ SPEC = re.compile(
 class PlatformInfo(object):
     def __init__(self, json):
         self._platform = json['platform']
-        self._intrinsic_prefix = json['intrinsic_prefix']
 
-    def intrinsic_prefix(self):
-        return self._intrinsic_prefix
+    def platform_prefix(self):
+        return self._platform
 
 class IntrinsicSet(object):
     def __init__(self, platform, json):
+        
         self._llvm_prefix = json['llvm_prefix']
         self._type_info = json['number_info']
         self._intrinsics = json['intrinsics']
         self._widths = json['width_info']
         self._platform = platform
+        self._intrinsic_prefix = json['intrinsic_prefix']
 
     def intrinsics(self):
         for raw in self._intrinsics:
@@ -48,6 +49,9 @@ class IntrinsicSet(object):
     def platform(self):
         return self._platform
 
+    def intrinsic_prefix(self):
+        return self._intrinsic_prefix
+
     def llvm_prefix(self):
         return self._llvm_prefix
 
@@ -538,8 +542,14 @@ class MonomorphicIntrinsic(object):
                                       *self._args,
                                       width = self._width)
 
+    def platform_prefix(self):
+        return self._platform.platform().platform_prefix()
+
+    def intrinsic_set_name(self):
+        return self._platform.intrinsic_prefix()
+
     def intrinsic_name(self):
-        return self._platform.platform().intrinsic_prefix() + self.intrinsic_suffix()
+        return self._platform.intrinsic_prefix() + self.intrinsic_suffix()
 
     def compiler_args(self):
         return ', '.join(arg.compiler_ctor_ref() for arg in self._args_raw)
@@ -751,8 +761,9 @@ class ExternBlock(object):
         return 'extern "platform-intrinsic" {'
 
     def render(self, mono):
-        return '    fn {}{};'.format(mono.intrinsic_name(),
-                                     mono.intrinsic_signature())
+        return '    fn {}{}{};'.format(mono.platform_prefix(),
+                                       mono.intrinsic_name(),
+                                       mono.intrinsic_signature())
 
     def close(self):
         return '}'
@@ -786,7 +797,7 @@ use IntrinsicDef::Named;
 #[inline(never)]
 pub fn find(name: &str) -> Option<Intrinsic> {{
     if !name.starts_with("{0}") {{ return None }}
-    Some(match &name["{0}".len()..] {{'''.format(platform.intrinsic_prefix())
+    Some(match &name["{0}".len()..] {{'''.format(platform.platform_prefix())
 
     def render(self, mono):
         return '''\
@@ -794,7 +805,7 @@ pub fn find(name: &str) -> Option<Intrinsic> {{
             inputs: {{ static INPUTS: [&'static Type; {}] = [{}]; &INPUTS }},
             output: {},
             definition: Named("{}")
-        }},'''.format(mono.intrinsic_suffix(),
+        }},'''.format(mono.intrinsic_set_name() + mono.intrinsic_suffix(),
                       len(mono._args_raw),
                       mono.compiler_args(),
                       mono.compiler_ret(),
index 05a4721aed8340e0ce56a1513d899e33e68e2b46..1f41e2ecf3e6d29ba0eb6d4d7d52c981faf40d94 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.avx.",
     "intrinsics": [
         {
index e88ff3d2b806dbf1fe45b6b2448c84cd2bc2e893..4e006c1c4cf417c512e32a5c8582d5f86600f142 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.avx2.",
     "intrinsics": [
         {
index c922d166c8fbc831758e8ab0e98a8036d7ca56a7..dcc26cd501c9bdbfaab71869e60baceba59f7663 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.fma.",
     "intrinsics": [
         {
index d48bcd268a0048fd87ee5635ea5f137fcd09dde9..8e90b8579c49ef996a33307d4903f6e95a4862f5 100644 (file)
@@ -1,26 +1,30 @@
 {
     "platform": "x86",
-    "intrinsic_prefix": "x86_mm",
     "number_info": {
         "signed": {
             "kind": "s",
             "kind_short": "",
             "data_type": { "pattern": "epi{bitwidth}" },
+            "bitwidth": { "pattern": "{bitwidth}" },
             "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
         },
         "unsigned": {
             "kind": "u",
             "kind_short": "u",
             "data_type": { "pattern": "epu{bitwidth}" },
+            "bitwidth": { "pattern": "{bitwidth}" },
             "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
         },
         "float": {
             "kind": "f",
             "data_type": { "32": "ps", "64": "pd" },
+            "bitwidth": { "pattern": "{bitwidth}" },
             "data_type_short": { "32": "ps", "64": "pd" }
         }
     },
     "width_info": {
+        "32":  { "width_mm": "32", "width_suffix": "" },
+        "64":  { "width_mm": "64", "width_suffix": "" },
         "128": { "width_mm": "", "width_suffix": "" },
         "256": { "width_mm": "256", "width_suffix": ".256" },
         "512": { "width_mm": "512", "width_suffix": ".512" }
index adff0dc41b2afd8221eb8f0a4dc7535a43c28790..d8eef8a3514aec7267107d6526dcdc214d596ad2 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.sse.",
     "intrinsics": [
         {
index d09980d95f31b8d09d73e503e4548cb298da9f0a..4d6317d80a57e306ce117902e31570b33c21bb83 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.sse2.",
     "intrinsics": [
         {
index ed13595929d1b24c752333eb702cfe638bee1e7e..119bf208f7e3437d48e8e143f982891da8c176e7 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.sse3.",
     "intrinsics": [
         {
index de792cd1060bbec74a67560efab31e9e743b9ec7..b499637e0d3c6f5046a5a3107c5da7cfaf2afacf 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.sse41.",
     "intrinsics": [
         {
index c43ffef0dc578cc7459be1fa520401ed880aba79..fdee9c8a6671b9e2d914185b6629da4da20be93c 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.sse42.",
     "intrinsics": [
         {
index af6afbb19a26d0669d852c7e78f12f0ef6e8252b..5a5617957b3e5b78597a0b4a86cadd3e4838d646 100644 (file)
@@ -1,4 +1,5 @@
 {
+    "intrinsic_prefix": "_mm",
     "llvm_prefix": "llvm.x86.ssse3.",
     "intrinsics": [
         {