Skip to content

Commit

Permalink
Autogenerate most x86 platform intrinsics.
Browse files Browse the repository at this point in the history
  • Loading branch information
huonw committed Aug 29, 2015
1 parent 5a167bd commit 24416a2
Show file tree
Hide file tree
Showing 10 changed files with 1,593 additions and 174 deletions.
152 changes: 152 additions & 0 deletions src/etc/platform-intrinsics/x86/avx.json
@@ -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"]
}
]
}
145 changes: 145 additions & 0 deletions src/etc/platform-intrinsics/x86/avx2.json
@@ -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"]
}
]
}
28 changes: 28 additions & 0 deletions src/etc/platform-intrinsics/x86/info.json
@@ -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" }
}
}
40 changes: 40 additions & 0 deletions src/etc/platform-intrinsics/x86/sse.json
@@ -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"]
}
]
}

0 comments on commit 24416a2

Please sign in to comment.