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:
def platform(self):
return self._platform
+ def intrinsic_prefix(self):
+ return self._intrinsic_prefix
+
def llvm_prefix(self):
return self._llvm_prefix
*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)
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 '}'
#[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 '''\
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(),
{
"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" }