Skip to content

Commit 1520554

Browse files
committed
Allow different instruction set prefixes within the same architecture
1 parent cb4f54d commit 1520554

File tree

13 files changed

+37
-13
lines changed

13 files changed

+37
-13
lines changed

src/etc/platform-intrinsics/aarch64.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"platform": "aarch64",
3-
"intrinsic_prefix": "aarch64_v",
2+
"platform": "aarch64_v",
3+
"intrinsic_prefix": "",
44
"llvm_prefix": "llvm.aarch64.neon.",
55
"number_info": {
66
"signed": {

src/etc/platform-intrinsics/arm.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"platform": "arm",
3-
"intrinsic_prefix": "arm_v",
2+
"platform": "arm_v",
3+
"intrinsic_prefix": "",
44
"llvm_prefix": "llvm.neon.v",
55
"number_info": {
66
"signed": {

src/etc/platform-intrinsics/generator.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,19 @@
2626
class PlatformInfo(object):
2727
def __init__(self, json):
2828
self._platform = json['platform']
29-
self._intrinsic_prefix = json['intrinsic_prefix']
3029

31-
def intrinsic_prefix(self):
32-
return self._intrinsic_prefix
30+
def platform_prefix(self):
31+
return self._platform
3332

3433
class IntrinsicSet(object):
3534
def __init__(self, platform, json):
35+
3636
self._llvm_prefix = json['llvm_prefix']
3737
self._type_info = json['number_info']
3838
self._intrinsics = json['intrinsics']
3939
self._widths = json['width_info']
4040
self._platform = platform
41+
self._intrinsic_prefix = json['intrinsic_prefix']
4142

4243
def intrinsics(self):
4344
for raw in self._intrinsics:
@@ -48,6 +49,9 @@ def intrinsics(self):
4849
def platform(self):
4950
return self._platform
5051

52+
def intrinsic_prefix(self):
53+
return self._intrinsic_prefix
54+
5155
def llvm_prefix(self):
5256
return self._llvm_prefix
5357

@@ -538,8 +542,14 @@ def intrinsic_suffix(self):
538542
*self._args,
539543
width = self._width)
540544

545+
def platform_prefix(self):
546+
return self._platform.platform().platform_prefix()
547+
548+
def intrinsic_set_name(self):
549+
return self._platform.intrinsic_prefix()
550+
541551
def intrinsic_name(self):
542-
return self._platform.platform().intrinsic_prefix() + self.intrinsic_suffix()
552+
return self._platform.intrinsic_prefix() + self.intrinsic_suffix()
543553

544554
def compiler_args(self):
545555
return ', '.join(arg.compiler_ctor_ref() for arg in self._args_raw)
@@ -751,8 +761,9 @@ def open(self, platform):
751761
return 'extern "platform-intrinsic" {'
752762

753763
def render(self, mono):
754-
return ' fn {}{};'.format(mono.intrinsic_name(),
755-
mono.intrinsic_signature())
764+
return ' fn {}{}{};'.format(mono.platform_prefix(),
765+
mono.intrinsic_name(),
766+
mono.intrinsic_signature())
756767

757768
def close(self):
758769
return '}'
@@ -786,15 +797,15 @@ def open(self, platform):
786797
#[inline(never)]
787798
pub fn find(name: &str) -> Option<Intrinsic> {{
788799
if !name.starts_with("{0}") {{ return None }}
789-
Some(match &name["{0}".len()..] {{'''.format(platform.intrinsic_prefix())
800+
Some(match &name["{0}".len()..] {{'''.format(platform.platform_prefix())
790801

791802
def render(self, mono):
792803
return '''\
793804
"{}" => Intrinsic {{
794805
inputs: {{ static INPUTS: [&'static Type; {}] = [{}]; &INPUTS }},
795806
output: {},
796807
definition: Named("{}")
797-
}},'''.format(mono.intrinsic_suffix(),
808+
}},'''.format(mono.intrinsic_set_name() + mono.intrinsic_suffix(),
798809
len(mono._args_raw),
799810
mono.compiler_args(),
800811
mono.compiler_ret(),

src/etc/platform-intrinsics/x86/avx.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.avx.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/avx2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.avx2.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/fma.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.fma.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/info.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
{
22
"platform": "x86",
3-
"intrinsic_prefix": "x86_mm",
43
"number_info": {
54
"signed": {
65
"kind": "s",
76
"kind_short": "",
87
"data_type": { "pattern": "epi{bitwidth}" },
8+
"bitwidth": { "pattern": "{bitwidth}" },
99
"data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
1010
},
1111
"unsigned": {
1212
"kind": "u",
1313
"kind_short": "u",
1414
"data_type": { "pattern": "epu{bitwidth}" },
15+
"bitwidth": { "pattern": "{bitwidth}" },
1516
"data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
1617
},
1718
"float": {
1819
"kind": "f",
1920
"data_type": { "32": "ps", "64": "pd" },
21+
"bitwidth": { "pattern": "{bitwidth}" },
2022
"data_type_short": { "32": "ps", "64": "pd" }
2123
}
2224
},
2325
"width_info": {
26+
"32": { "width_mm": "32", "width_suffix": "" },
27+
"64": { "width_mm": "64", "width_suffix": "" },
2428
"128": { "width_mm": "", "width_suffix": "" },
2529
"256": { "width_mm": "256", "width_suffix": ".256" },
2630
"512": { "width_mm": "512", "width_suffix": ".512" }

src/etc/platform-intrinsics/x86/sse.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.sse.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/sse2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.sse2.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/sse3.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.sse3.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/sse41.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.sse41.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/sse42.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.sse42.",
34
"intrinsics": [
45
{

src/etc/platform-intrinsics/x86/ssse3.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"intrinsic_prefix": "_mm",
23
"llvm_prefix": "llvm.x86.ssse3.",
34
"intrinsics": [
45
{

0 commit comments

Comments
 (0)