Autogenerate most x86 platform intrinsics.

This commit is contained in:
Huon Wilson 2015-08-28 22:43:38 -07:00
parent 5a167bdb4c
commit 24416a2151
10 changed files with 1593 additions and 174 deletions

View file

@ -0,0 +1,152 @@
{
"llvm_prefix": "llvm.x86.avx.",
"intrinsics": [
{
"intrinsic": "256_addsub_{0.data_type}",
"width": [256],
"llvm": "addsub.{0.data_type}.256",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "256_dp_ps",
"width": [256],
"llvm": "dp.ps.256",
"ret": "f32",
"args": ["0", "0", "S32"]
},
{
"intrinsic": "256_hadd_{0.data_type}",
"width": [256],
"llvm": "hadd.{0.data_type}.256",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "256_hsub_{0.data_type}",
"width": [256],
"llvm": "hsub.{0.data_type}.256",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "256_max_{0.data_type}",
"width": [256],
"llvm": "max.{0.data_type}.256",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "256_min_{0.data_type}",
"width": [256],
"llvm": "min.{0.data_type}.256",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "256_movemask_ps",
"width": [256],
"llvm": "movmsk.ps.256",
"ret": "S32",
"args": ["f32"]
},
{
"intrinsic": "256_movemask_pd",
"width": [256],
"llvm": "movmsk.pd.256",
"ret": "S32",
"args": ["f64"]
},
{
"intrinsic": "{0.width_mm}_permutevar_{0.data_type}",
"width": [128, 256],
"llvm": "vpermilvar.{0.data_type}{0.width_suffix}",
"ret": "f(32-64)",
"args": ["0", "0s"]
},
{
"intrinsic": "256_rcp_ps",
"width": [256],
"llvm": "rcp.ps.256",
"ret": "f32",
"args": ["f32"]
},
{
"intrinsic": "256_rsqrt_ps",
"width": [256],
"llvm": "rsqrt.ps.256",
"ret": "f32",
"args": ["f32"]
},
{
"intrinsic": "256_sqrt_{0.data_type}",
"width": [256],
"llvm": "!llvm.sqrt.{0.llvm_name}",
"ret": "f(32-64)",
"args": ["0"]
},
{
"intrinsic": "{1.width_mm}_testc_ps",
"width": [128, 256],
"llvm": "vtestc.ps{1.width_suffix}",
"ret": "S32",
"args": ["f32", "f32"]
},
{
"intrinsic": "{1.width_mm}_testc_pd",
"width": [128, 256],
"llvm": "vtestc.pd{1.width_suffix}",
"ret": "S32",
"args": ["f64", "f64"]
},
{
"intrinsic": "256_testc_si256",
"width": [256],
"llvm": "ptestc.256",
"ret": "S32",
"args": ["u64", "u64"]
},
{
"intrinsic": "{1.width_mm}_testnzc_ps",
"width": [128, 256],
"llvm": "vtestnzc.ps{1.width_suffix}",
"ret": "S32",
"args": ["f32", "f32"]
},
{
"intrinsic": "{1.width_mm}_testnzc_pd",
"width": [128, 256],
"llvm": "vtestnzc.pd{1.width_suffix}",
"ret": "S32",
"args": ["f64", "f64"]
},
{
"intrinsic": "256_testnzc_si256",
"width": [256],
"llvm": "ptestnzc.256",
"ret": "S32",
"args": ["u64", "u64"]
},
{
"intrinsic": "{1.width_mm}_testz_ps",
"width": [128, 256],
"llvm": "vtestz.ps{1.width_suffix}",
"ret": "S32",
"args": ["f32", "f32"]
},
{
"intrinsic": "{1.width_mm}_testz_pd",
"width": [128, 256],
"llvm": "vtestz.pd{1.width_suffix}",
"ret": "S32",
"args": ["f64", "f64"]
},
{
"intrinsic": "256_testz_si256",
"width": [256],
"llvm": "ptestz.256",
"ret": "S32",
"args": ["u64", "u64"]
}
]
}

View file

@ -0,0 +1,145 @@
{
"llvm_prefix": "llvm.x86.avx2.",
"intrinsics": [
{
"intrinsic": "256_abs_{0.data_type}",
"width": [256],
"llvm": "avx2.pabs.{0.data_type_short}",
"ret": "s(8-32)",
"args": ["0"]
},
{
"intrinsic": "256_adds_{0.data_type}",
"width": [256],
"llvm": "avx2.padd{0.kind_short}s.{0.data_type_short}",
"ret": "i(8-16)",
"args": ["0", "0"]
},
{
"intrinsic": "256_avg_{0.data_type}",
"width": [256],
"llvm": "avx2.pavg.{0.data_type_short}",
"ret": "u(8-16)",
"args": ["0", "0"]
},
{
"intrinsic": "256_hadd_{0.data_type}",
"width": [256],
"llvm": "phadd.{0.data_type_short}",
"ret": "s(16-32)",
"args": ["0", "0"]
},
{
"intrinsic": "256_hadds_epi16",
"width": [256],
"llvm": "phadd.sw",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "256_hsub_{0.data_type}",
"width": [256],
"llvm": "phsub.{0.data_type_short}",
"ret": "s(16-32)",
"args": ["0", "0"]
},
{
"intrinsic": "256_hsubs_epi16",
"width": [256],
"llvm": "phsub.sw",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "256_madd_epi16",
"width": [256],
"llvm": "pmadd.wd",
"ret": "s32",
"args": ["s16", "s16"]
},
{
"intrinsic": "256_maddubs_epi16",
"width": [256],
"llvm": "pmadd.ub.sw",
"ret": "s16",
"args": ["s8", "s8"]
},
{
"intrinsic": "256_max_{0.data_type}",
"width": [256],
"llvm": "pmax{0.kind}.{0.data_type_short}",
"ret": "i(8-32)",
"args": ["0", "0"]
},
{
"intrinsic": "256_min_{0.data_type}",
"width": [256],
"llvm": "pmin{0.kind}.{0.data_type_short}",
"ret": "i(8-32)",
"args": ["0", "0"]
},
{
"intrinsic": "256_mul_{0.data_type}",
"width": [256],
"llvm": "pmul{0.data_type_short}.dq",
"ret": "i64",
"args": ["0dn", "0dn"]
},
{
"intrinsic": "256_mulhi_{0.data_type}",
"width": [256],
"llvm": "pmulh{0.data_type_short}.w",
"ret": "i16",
"args": ["0", "0"]
},
{
"intrinsic": "256_mulhrs_epi16",
"width": [256],
"llvm": "pmul.hr.sw",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "256_pack{0.kind_short}s_{1.data_type}",
"width": [256],
"llvm": "pack{0.kind}s{1.data_type_short}{0.data_type_short}",
"ret": "i(8-16)",
"args": ["0hws", "0hws"]
},
{
"intrinsic": "256_permutevar8x32_{0.data_type}",
"width": [256],
"llvm": "perm{0.data_type_short}",
"ret": ["s32", "f32"],
"args": ["0", "0s"]
},
{
"intrinsic": "256_sad_epu8",
"width": [256],
"llvm": "psad.bw",
"ret": "u8",
"args": ["0", "0"]
},
{
"intrinsic": "256_shuffle_epi8",
"width": [256],
"llvm": "pshuf.b",
"ret": "s8",
"args": ["0", "0"]
},
{
"intrinsic": "256_sign_{0.data_type}",
"width": [256],
"llvm": "psign.{0.data_type_short}",
"ret": "s(8-32)",
"args": ["0", "0"]
},
{
"intrinsic": "256_subs_{0.data_type}",
"width": [256],
"llvm": "psub{0.kind_short}s.{0.data_type_short}",
"ret": "i(8-16)",
"args": ["0", "0"]
}
]
}

View file

@ -0,0 +1,28 @@
{
"platform": "x86",
"intrinsic_prefix": "x86_mm",
"number_info": {
"signed": {
"kind": "s",
"kind_short": "",
"data_type": { "pattern": "epi{bitwidth}" },
"data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
},
"unsigned": {
"kind": "u",
"kind_short": "u",
"data_type": { "pattern": "epu{bitwidth}" },
"data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
},
"float": {
"kind": "f",
"data_type": { "32": "ps", "64": "pd" },
"data_type_short": { "32": "ps", "64": "pd" }
}
},
"width_info": {
"128": { "width_mm": "", "width_suffix": "" },
"256": { "width_mm": "256", "width_suffix": ".256" },
"512": { "width_mm": "512", "width_suffix": ".512" }
}
}

View file

@ -0,0 +1,40 @@
{
"llvm_prefix": "llvm.x86.sse.",
"intrinsics": [
{
"intrinsic": "_movemask_ps",
"width": [128],
"llvm": "movmsk.ps",
"ret": "S32",
"args": ["f32"]
},
{
"intrinsic": "_max_ps",
"width": [128],
"llvm": "max.ps",
"ret": "f32",
"args": ["0", "0"]
},
{
"intrinsic": "_min_ps",
"width": [128],
"llvm": "min.ps",
"ret": "f32",
"args": ["0", "0"]
},
{
"intrinsic": "_rsqrt_ps",
"width": [128],
"llvm": "rsqrt.ps",
"ret": "f32",
"args": ["0"]
},
{
"intrinsic": "_rcp_ps",
"width": [128],
"llvm": "rcp.ps",
"ret": "f32",
"args": ["0"]
}
]
}

View file

@ -0,0 +1,110 @@
{
"llvm_prefix": "llvm.x86.sse2.",
"intrinsics": [
{
"intrinsic": "_adds_{0.data_type}",
"width": [128],
"llvm": "padd{0.kind_short}s.{0.data_type_short}",
"ret": "i(8-16)",
"args": ["0", "0"]
},
{
"intrinsic": "_avg_{0.data_type}",
"width": [128],
"llvm": "pavg.{0.data_type_short}",
"ret": "u(8-16)",
"args": ["0", "0"]
},
{
"intrinsic": "_madd_epi16",
"width": [128],
"llvm": "pmadd.wd",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "_max_{0.data_type}",
"width": [128],
"llvm": "pmax{0.kind}.{0.data_type_short}",
"ret": ["s16", "u8"],
"args": ["0", "0"]
},
{
"intrinsic": "_max_pd",
"width": [128],
"llvm": "max.pd",
"ret": "f64",
"args": ["0", "0"]
},
{
"intrinsic": "_min_{0.data_type}",
"width": [128],
"llvm": "pmin{0.kind}.{0.data_type_short}",
"ret": ["s16", "u8"],
"args": ["0", "0"]
},
{
"intrinsic": "_min_pd",
"width": [128],
"llvm": "min.pd",
"ret": "f64",
"args": ["0", "0"]
},
{
"intrinsic": "_movemask_pd",
"width": [128],
"llvm": "movmsk.pd",
"ret": "S32",
"args": ["f64"]
},
{
"intrinsic": "_movemask_epi8",
"width": [128],
"llvm": "pmovmskb.128",
"ret": "S32",
"args": ["s8"]
},
{
"intrinsic": "_mul_epu32",
"width": [128],
"llvm": "pmulu.dq",
"ret": "s64",
"args": ["0dn", "0dn"]
},
{
"intrinsic": "_mulhi_ep{0.kind}16",
"width": [128],
"llvm": "pmulh{0.kind_short}.w",
"ret": "i16",
"args": ["0", "0"]
},
{
"intrinsic": "_packs_{1.data_type}",
"width": [128],
"llvm": "packss{1.data_type_short}{0.data_type_short}.128",
"ret": "s(8-16)",
"args": ["0hw", "0hw"]
},
{
"intrinsic": "_packus_epi16",
"width": [128],
"llvm": "packuswb.128",
"ret": "u8",
"args": ["s16", "s16"]
},
{
"intrinsic": "_sad_epu8",
"width": [128],
"llvm": "psad.bw",
"ret": "u64",
"args": ["u8", "u8"]
},
{
"intrinsic": "_subs_{0.data_type}",
"width": [128],
"llvm": "psub{0.kind_short}s.{0.data_type_short}",
"ret": "i(8-16)",
"args": ["0", "0"]
}
]
}

View file

@ -0,0 +1,26 @@
{
"llvm_prefix": "llvm.x86.sse3.",
"intrinsics": [
{
"intrinsic": "_addsub_{0.data_type}",
"width": [128],
"llvm": "addsub.{0.data_type}",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "_hadd_{0.data_type}",
"width": [128],
"llvm": "hadd.{0.data_type}",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "_hsub_{0.data_type}",
"width": [128],
"llvm": "hsub.{0.data_type}",
"ret": "f(32-64)",
"args": ["0", "0"]
}
]
}

View file

@ -0,0 +1,75 @@
{
"llvm_prefix": "llvm.x86.sse41.",
"intrinsics": [
{
"intrinsic": "_dp_{0.data_type}",
"width": [128],
"llvm": "dp{0.data_type}",
"ret": "f(32-64)",
"args": ["0", "0", "S32"]
},
{
"intrinsic": "_max_{0.data_type}",
"width": [128],
"llvm": "pmax{0.kind}{0.data_type_short}",
"ret": ["s8", "u16", "i32"],
"args": ["0", "0"]
},
{
"intrinsic": "_min_{0.data_type}",
"width": [128],
"llvm": "pmin{0.kind}{0.data_type_short}",
"ret": ["s8", "u16", "i32"],
"args": ["0", "0"]
},
{
"intrinsic": "_minpos_epu16",
"width": [128],
"llvm": "phminposuw",
"ret": "u16",
"args": ["0"]
},
{
"intrinsic": "_mpsadbw_epu8",
"width": [128],
"llvm": "mpsadbw",
"ret": "u16",
"args": ["u8", "u8", "S32"]
},
{
"intrinsic": "_mul_epi32",
"width": [128],
"llvm": "muldq",
"ret": "s64",
"args": ["s32", "s32"]
},
{
"intrinsic": "_packus_epi32",
"width": [128],
"llvm": "packusdw",
"ret": "u16",
"args": ["s32", "s32"]
},
{
"intrinsic": "_testc_si128",
"width": [128],
"llvm": "ptestc",
"ret": "S32",
"args": ["u64", "u64"]
},
{
"intrinsic": "_testncz_si128",
"width": [128],
"llvm": "ptest.nzc",
"ret": "S32",
"args": ["u64", "u64"]
},
{
"intrinsic": "_testz_si128",
"width": [128],
"llvm": "ptestz",
"ret": "S32",
"args": ["u64", "u64"]
}
]
}

View file

@ -0,0 +1,103 @@
{
"llvm_prefix": "llvm.x86.sse42.",
"intrinsics": [
{
"intrinsic": "_cmpestra",
"width": [128],
"llvm": "pcmpestria128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestrc",
"width": [128],
"llvm": "pcmpestric128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestri",
"width": [128],
"llvm": "pcmpestri128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestrm",
"width": [128],
"llvm": "pcmpestrim128",
"ret": "s8",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestro",
"width": [128],
"llvm": "pcmpestrio128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestrs",
"width": [128],
"llvm": "pcmpestris128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpestrz",
"width": [128],
"llvm": "pcmpestriz128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistra",
"width": [128],
"llvm": "pcmpistria128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistrc",
"width": [128],
"llvm": "pcmpistric128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistri",
"width": [128],
"llvm": "pcmpistrii128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistrm",
"width": [128],
"llvm": "pcmpistrim128",
"ret": "s8",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistro",
"width": [128],
"llvm": "pcmpistrio128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistrs",
"width": [128],
"llvm": "pcmpistris128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
},
{
"intrinsic": "_cmpistrz",
"width": [128],
"llvm": "pcmpistriz128",
"ret": "S32",
"args": ["s8", "S32", "s8", "S32", "S32"]
}
]
}

View file

@ -0,0 +1,68 @@
{
"llvm_prefix": "llvm.x86.ssse3.",
"intrinsics": [
{
"intrinsic": "_abs_{0.data_type}",
"width": [128],
"llvm": "pabs.{0.data_type_short}",
"ret": "s(8-32)",
"args": ["0"]
},
{
"intrinsic": "_hadd_{0.data_type}",
"width": [128],
"llvm": "phadd.{0.data_type_short}.128",
"ret": "s(16-32)",
"args": ["0", "0"]
},
{
"intrinsic": "_hadds_epi16",
"width": [128],
"llvm": "phadd.sw.128",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "_hsub_{0.data_type}",
"width": [128],
"llvm": "phsub.{0.data_type_short}.128",
"ret": "s(16-32)",
"args": ["0", "0"]
},
{
"intrinsic": "_hsubs_epi16",
"width": [128],
"llvm": "phsub.sw.128",
"ret": "s16",
"args": ["0", "0"]
},
{
"intrinsic": "_maddubs_epi16",
"width": [128],
"llvm": "pmadd.ub.sw.128",
"ret": "s16",
"args": ["s8", "s8"]
},
{
"intrinsic": "_mulhrs_epi16",
"width": [128],
"llvm": "pmul.hr.sw.128",
"ret": "s16",
"args": ["s16", "s16"]
},
{
"intrinsic": "_shuffle_epi8",
"width": [128],
"llvm": "pshuf.b.128",
"ret": "s8",
"args": ["s8", "s8"]
},
{
"intrinsic": "_sign_{0.data_type}",
"width": [128],
"llvm": "psign.{0.data_type_short}.128",
"ret": "s(8-16)",
"args": ["0", "0"]
}
]
}

File diff suppressed because it is too large Load diff