Skip to content

Commit

Permalink
Add various pointer & void-using x86 intrinsics.
Browse files Browse the repository at this point in the history
  • Loading branch information
huonw committed Sep 4, 2015
1 parent 2b45a9a commit c19e7b6
Show file tree
Hide file tree
Showing 6 changed files with 378 additions and 13 deletions.
42 changes: 42 additions & 0 deletions src/etc/platform-intrinsics/x86/avx.json
Expand Up @@ -36,6 +36,20 @@
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "{0.width_mm}_maskload_{0.data_type}",
"width": [128, 256],
"llvm": "maskload.{0.data_type_short}{0.width_suffix}",
"ret": ["f(32-64)"],
"args": ["0SPc/S8", "0s->0"]
},
{
"intrinsic": "{3.width_mm}_maskstore_{3.data_type}",
"width": [128, 256],
"llvm": "maskstore.{3.data_type_short}{3.width_suffix}",
"ret": "V",
"args": ["F(32-64)Pm/S8", "1Dsv->1Dv", "1Dv"]
},
{
"intrinsic": "256_min_{0.data_type}",
"width": [256],
Expand Down Expand Up @@ -78,6 +92,20 @@
"ret": "f32",
"args": ["f32"]
},
{
"intrinsic": "256_storeu_{2.data_type}",
"width": [256],
"llvm": "storeu.ps.256",
"ret": "V",
"args": ["f(32-64)Pm/U8", "1D"]
},
{
"intrinsic": "256_storeu_si256",
"width": [256],
"llvm": "storeu.dq.256",
"ret": "V",
"args": ["u8Pm/U8", "1D"]
},
{
"intrinsic": "256_sqrt_{0.data_type}",
"width": [256],
Expand Down Expand Up @@ -147,6 +175,20 @@
"llvm": "ptestz.256",
"ret": "S32",
"args": ["u64", "u64"]
},
{
"intrinsic": "256_zeroall",
"width": [256],
"llvm": "vzeroall",
"ret": "V",
"args": []
},
{
"intrinsic": "256_zeroupper",
"width": [256],
"llvm": "vzeroupper",
"ret": "V",
"args": []
}
]
}
48 changes: 45 additions & 3 deletions src/etc/platform-intrinsics/x86/avx2.json
Expand Up @@ -4,21 +4,21 @@
{
"intrinsic": "256_abs_{0.data_type}",
"width": [256],
"llvm": "avx2.pabs.{0.data_type_short}",
"llvm": "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}",
"llvm": "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}",
"llvm": "pavg.{0.data_type_short}",
"ret": "u(8-16)",
"args": ["0", "0"]
},
Expand Down Expand Up @@ -64,6 +64,48 @@
"ret": "s16",
"args": ["s8", "s8"]
},
{
"intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
"width": [128, 256],
"llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
"ret": ["s32", "f32"],
"args": ["0", "0SPc/S8", "s32", "0s->0", "S32/8"]
},
{
"intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
"width": [128, 256],
"llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
"ret": ["s64", "f64"],
"args": ["0", "0SPc/S8", "s32x128", "0s->0", "S32/8"]
},
{
"intrinsic": "{3.width_mm}_mask_i64gather_{0.data_type}",
"width": [128, 256],
"llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
"ret": ["s32x128", "f32x128"],
"args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
},
{
"intrinsic": "{0.width_mm}_mask_i64gather_{0.data_type}",
"width": [128, 256],
"llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
"ret": ["s64", "f64"],
"args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
},
{
"intrinsic": "{0.width_mm}_maskload_{0.data_type}",
"width": [128, 256],
"llvm": "maskload.{0.data_type_short}{0.width_suffix}",
"ret": ["s(32-64)"],
"args": ["0Pc/S8", "0"]
},
{
"intrinsic": "{2.width_mm}_maskstore_{2.data_type}",
"width": [128, 256],
"llvm": "maskstore.{2.data_type_short}{2.width_suffix}",
"ret": "V",
"args": ["S(32-64)Pm/S8", "1Dv", "2"]
},
{
"intrinsic": "256_max_{0.data_type}",
"width": [256],
Expand Down
7 changes: 7 additions & 0 deletions src/etc/platform-intrinsics/x86/sse.json
Expand Up @@ -42,6 +42,13 @@
"llvm": "!llvm.sqrt.v4f32",
"ret": "f32",
"args": ["0"]
},
{
"intrinsic": "_storeu_ps",
"width": [128],
"llvm": "storeu.ps",
"ret": "V",
"args": ["F32Pm/S8", "f32"]
}
]
}
42 changes: 42 additions & 0 deletions src/etc/platform-intrinsics/x86/sse2.json
Expand Up @@ -15,13 +15,27 @@
"ret": "u(8-16)",
"args": ["0", "0"]
},
{
"intrinsic": "_lfence",
"width": [128],
"llvm": "lfence",
"ret": "V",
"args": []
},
{
"intrinsic": "_madd_epi16",
"width": [128],
"llvm": "pmadd.wd",
"ret": "s32",
"args": ["s16", "s16"]
},
{
"intrinsic": "_maskmoveu_si128",
"width": [128],
"llvm": "maskmov.dqu",
"ret": "V",
"args": ["u8", "u8", "U8Pm"]
},
{
"intrinsic": "_max_{0.data_type}",
"width": [128],
Expand All @@ -36,6 +50,13 @@
"ret": "f64",
"args": ["0", "0"]
},
{
"intrinsic": "_mfence",
"width": [128],
"llvm": "fence",
"ret": "V",
"args": []
},
{
"intrinsic": "_min_{0.data_type}",
"width": [128],
Expand Down Expand Up @@ -99,13 +120,34 @@
"ret": "u64",
"args": ["u8", "u8"]
},
{
"intrinsic": "_sfence",
"width": [128],
"llvm": "sfence",
"ret": "V",
"args": []
},
{
"intrinsic": "_sqrt_pd",
"width": [128],
"llvm": "!llvm.sqrt.v2f64",
"ret": "f64",
"args": ["0"]
},
{
"intrinsic": "_storeu_pd",
"width": [128],
"llvm": "storeu.pd",
"ret": "V",
"args": ["F64Pm/U8", "f64"]
},
{
"intrinsic": "_storeu_si128",
"width": [128],
"llvm": "storeu.dq",
"ret": "V",
"args": ["u8Pm/U8", "u8"]
},
{
"intrinsic": "_subs_{0.data_type}",
"width": [128],
Expand Down
7 changes: 7 additions & 0 deletions src/etc/platform-intrinsics/x86/sse3.json
Expand Up @@ -21,6 +21,13 @@
"llvm": "hsub.{0.data_type}",
"ret": "f(32-64)",
"args": ["0", "0"]
},
{
"intrinsic": "_lddqu_si128",
"width": [128],
"llvm": "ldu.dq",
"ret": "u8",
"args": ["0Pc/S8"]
}
]
}

0 comments on commit c19e7b6

Please sign in to comment.