diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2015-09-03 14:50:20 -0700 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2015-09-04 09:14:13 -0700 |
| commit | c19e7b629b42fc2e153893762397a336423e6ec3 (patch) | |
| tree | f644347e6da7af3615a3874e224c73c456ace6ab /src/etc | |
| parent | 2b45a9ab54fbf593c6df84e8852fc1b3f1f0810a (diff) | |
Add various pointer & void-using x86 intrinsics.
Diffstat (limited to 'src/etc')
| -rw-r--r-- | src/etc/platform-intrinsics/x86/avx.json | 42 | ||||
| -rw-r--r-- | src/etc/platform-intrinsics/x86/avx2.json | 48 | ||||
| -rw-r--r-- | src/etc/platform-intrinsics/x86/sse.json | 7 | ||||
| -rw-r--r-- | src/etc/platform-intrinsics/x86/sse2.json | 42 | ||||
| -rw-r--r-- | src/etc/platform-intrinsics/x86/sse3.json | 7 |
5 files changed, 143 insertions, 3 deletions
diff --git a/src/etc/platform-intrinsics/x86/avx.json b/src/etc/platform-intrinsics/x86/avx.json index 4ac82fb90e9..2c1492c2954 100644 --- a/src/etc/platform-intrinsics/x86/avx.json +++ b/src/etc/platform-intrinsics/x86/avx.json @@ -37,6 +37,20 @@ "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], "llvm": "min.{0.data_type}.256", @@ -79,6 +93,20 @@ "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], "llvm": "!llvm.sqrt.{0.llvm_name}", @@ -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": [] } ] } diff --git a/src/etc/platform-intrinsics/x86/avx2.json b/src/etc/platform-intrinsics/x86/avx2.json index bd260ec02e9..e88ff3d2b80 100644 --- a/src/etc/platform-intrinsics/x86/avx2.json +++ b/src/etc/platform-intrinsics/x86/avx2.json @@ -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"] }, @@ -65,6 +65,48 @@ "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], "llvm": "pmax{0.kind}.{0.data_type_short}", diff --git a/src/etc/platform-intrinsics/x86/sse.json b/src/etc/platform-intrinsics/x86/sse.json index 27da842934c..adff0dc41b2 100644 --- a/src/etc/platform-intrinsics/x86/sse.json +++ b/src/etc/platform-intrinsics/x86/sse.json @@ -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"] } ] } diff --git a/src/etc/platform-intrinsics/x86/sse2.json b/src/etc/platform-intrinsics/x86/sse2.json index abd0b369573..d09980d95f3 100644 --- a/src/etc/platform-intrinsics/x86/sse2.json +++ b/src/etc/platform-intrinsics/x86/sse2.json @@ -16,6 +16,13 @@ "args": ["0", "0"] }, { + "intrinsic": "_lfence", + "width": [128], + "llvm": "lfence", + "ret": "V", + "args": [] + }, + { "intrinsic": "_madd_epi16", "width": [128], "llvm": "pmadd.wd", @@ -23,6 +30,13 @@ "args": ["s16", "s16"] }, { + "intrinsic": "_maskmoveu_si128", + "width": [128], + "llvm": "maskmov.dqu", + "ret": "V", + "args": ["u8", "u8", "U8Pm"] + }, + { "intrinsic": "_max_{0.data_type}", "width": [128], "llvm": "pmax{0.kind}.{0.data_type_short}", @@ -37,6 +51,13 @@ "args": ["0", "0"] }, { + "intrinsic": "_mfence", + "width": [128], + "llvm": "fence", + "ret": "V", + "args": [] + }, + { "intrinsic": "_min_{0.data_type}", "width": [128], "llvm": "pmin{0.kind}.{0.data_type_short}", @@ -100,6 +121,13 @@ "args": ["u8", "u8"] }, { + "intrinsic": "_sfence", + "width": [128], + "llvm": "sfence", + "ret": "V", + "args": [] + }, + { "intrinsic": "_sqrt_pd", "width": [128], "llvm": "!llvm.sqrt.v2f64", @@ -107,6 +135,20 @@ "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], "llvm": "psub{0.kind_short}s.{0.data_type_short}", diff --git a/src/etc/platform-intrinsics/x86/sse3.json b/src/etc/platform-intrinsics/x86/sse3.json index 376e32fa915..ed13595929d 100644 --- a/src/etc/platform-intrinsics/x86/sse3.json +++ b/src/etc/platform-intrinsics/x86/sse3.json @@ -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"] } ] } |
