]> git.lizzy.rs Git - rust.git/blob - src/librustc_platform_intrinsics/x86.rs
Auto merge of #43648 - RalfJung:jemalloc-debug, r=alexcrichton
[rust.git] / src / librustc_platform_intrinsics / x86.rs
1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
12 // ignore-tidy-linelength
13
14 #![allow(unused_imports)]
15
16 use {Intrinsic, Type};
17 use IntrinsicDef::Named;
18
19 // The default inlining settings trigger a pathological behaviour in
20 // LLVM, which causes makes compilation very slow. See #28273.
21 #[inline(never)]
22 pub fn find(name: &str) -> Option<Intrinsic> {
23     if !name.starts_with("x86") { return None }
24     Some(match &name["x86".len()..] {
25         "_mm256_abs_epi8" => Intrinsic {
26             inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
27             output: &::I8x32,
28             definition: Named("llvm.x86.avx2.pabs.b")
29         },
30         "_mm256_abs_epi16" => Intrinsic {
31             inputs: { static INPUTS: [&'static Type; 1] = [&::I16x16]; &INPUTS },
32             output: &::I16x16,
33             definition: Named("llvm.x86.avx2.pabs.w")
34         },
35         "_mm256_abs_epi32" => Intrinsic {
36             inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
37             output: &::I32x8,
38             definition: Named("llvm.x86.avx2.pabs.d")
39         },
40         "_mm256_adds_epi8" => Intrinsic {
41             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
42             output: &::I8x32,
43             definition: Named("llvm.x86.avx2.padds.b")
44         },
45         "_mm256_adds_epu8" => Intrinsic {
46             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
47             output: &::U8x32,
48             definition: Named("llvm.x86.avx2.paddus.b")
49         },
50         "_mm256_adds_epi16" => Intrinsic {
51             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
52             output: &::I16x16,
53             definition: Named("llvm.x86.avx2.padds.w")
54         },
55         "_mm256_adds_epu16" => Intrinsic {
56             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
57             output: &::U16x16,
58             definition: Named("llvm.x86.avx2.paddus.w")
59         },
60         "_mm256_avg_epu8" => Intrinsic {
61             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
62             output: &::U8x32,
63             definition: Named("llvm.x86.avx2.pavg.b")
64         },
65         "_mm256_avg_epu16" => Intrinsic {
66             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
67             output: &::U16x16,
68             definition: Named("llvm.x86.avx2.pavg.w")
69         },
70         "_mm256_hadd_epi16" => Intrinsic {
71             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
72             output: &::I16x16,
73             definition: Named("llvm.x86.avx2.phadd.w")
74         },
75         "_mm256_hadd_epi32" => Intrinsic {
76             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
77             output: &::I32x8,
78             definition: Named("llvm.x86.avx2.phadd.d")
79         },
80         "_mm256_hadds_epi16" => Intrinsic {
81             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
82             output: &::I16x16,
83             definition: Named("llvm.x86.avx2.phadd.sw")
84         },
85         "_mm256_hsub_epi16" => Intrinsic {
86             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
87             output: &::I16x16,
88             definition: Named("llvm.x86.avx2.phsub.w")
89         },
90         "_mm256_hsub_epi32" => Intrinsic {
91             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
92             output: &::I32x8,
93             definition: Named("llvm.x86.avx2.phsub.d")
94         },
95         "_mm256_hsubs_epi16" => Intrinsic {
96             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
97             output: &::I16x16,
98             definition: Named("llvm.x86.avx2.phsub.sw")
99         },
100         "_mm256_madd_epi16" => Intrinsic {
101             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
102             output: &::I32x8,
103             definition: Named("llvm.x86.avx2.pmadd.wd")
104         },
105         "_mm256_maddubs_epi16" => Intrinsic {
106             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
107             output: &::I16x16,
108             definition: Named("llvm.x86.avx2.pmadd.ub.sw")
109         },
110         "_mm_mask_i32gather_epi32" => Intrinsic {
111             inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4, &::I32_8]; &INPUTS },
112             output: &::I32x4,
113             definition: Named("llvm.x86.avx2.gather.d.d")
114         },
115         "_mm_mask_i32gather_ps" => Intrinsic {
116             inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4_F32, &::I32_8]; &INPUTS },
117             output: &::F32x4,
118             definition: Named("llvm.x86.avx2.gather.d.ps")
119         },
120         "_mm256_mask_i32gather_epi32" => Intrinsic {
121             inputs: { static INPUTS: [&'static Type; 5] = [&::I32x8, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8, &::I32_8]; &INPUTS },
122             output: &::I32x8,
123             definition: Named("llvm.x86.avx2.gather.d.d.256")
124         },
125         "_mm256_mask_i32gather_ps" => Intrinsic {
126             inputs: { static INPUTS: [&'static Type; 5] = [&::F32x8, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8_F32, &::I32_8]; &INPUTS },
127             output: &::F32x8,
128             definition: Named("llvm.x86.avx2.gather.d.ps.256")
129         },
130         "_mm_mask_i32gather_epi64" => Intrinsic {
131             inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2, &::I32_8]; &INPUTS },
132             output: &::I64x2,
133             definition: Named("llvm.x86.avx2.gather.d.q")
134         },
135         "_mm_mask_i32gather_pd" => Intrinsic {
136             inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2_F64, &::I32_8]; &INPUTS },
137             output: &::F64x2,
138             definition: Named("llvm.x86.avx2.gather.d.pd")
139         },
140         "_mm256_mask_i32gather_epi64" => Intrinsic {
141             inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4, &::I32_8]; &INPUTS },
142             output: &::I64x4,
143             definition: Named("llvm.x86.avx2.gather.d.q.256")
144         },
145         "_mm256_mask_i32gather_pd" => Intrinsic {
146             inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4_F64, &::I32_8]; &INPUTS },
147             output: &::F64x4,
148             definition: Named("llvm.x86.avx2.gather.d.pd.256")
149         },
150         "_mm_mask_i64gather_epi32" => Intrinsic {
151             inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4, &::I32_8]; &INPUTS },
152             output: &::I32x4,
153             definition: Named("llvm.x86.avx2.gather.q.d")
154         },
155         "_mm_mask_i64gather_ps" => Intrinsic {
156             inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4_F32, &::I32_8]; &INPUTS },
157             output: &::F32x4,
158             definition: Named("llvm.x86.avx2.gather.q.ps")
159         },
160         "_mm256_mask_i64gather_epi32" => Intrinsic {
161             inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4, &::I32_8]; &INPUTS },
162             output: &::I32x4,
163             definition: Named("llvm.x86.avx2.gather.q.d")
164         },
165         "_mm256_mask_i64gather_ps" => Intrinsic {
166             inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4_F32, &::I32_8]; &INPUTS },
167             output: &::F32x4,
168             definition: Named("llvm.x86.avx2.gather.q.ps")
169         },
170         "_mm_mask_i64gather_epi64" => Intrinsic {
171             inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2, &::I32_8]; &INPUTS },
172             output: &::I64x2,
173             definition: Named("llvm.x86.avx2.gather.q.q")
174         },
175         "_mm_mask_i64gather_pd" => Intrinsic {
176             inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2_F64, &::I32_8]; &INPUTS },
177             output: &::F64x2,
178             definition: Named("llvm.x86.avx2.gather.q.pd")
179         },
180         "_mm256_mask_i64gather_epi64" => Intrinsic {
181             inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4, &::I32_8]; &INPUTS },
182             output: &::I64x4,
183             definition: Named("llvm.x86.avx2.gather.q.q.256")
184         },
185         "_mm256_mask_i64gather_pd" => Intrinsic {
186             inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4_F64, &::I32_8]; &INPUTS },
187             output: &::F64x4,
188             definition: Named("llvm.x86.avx2.gather.q.pd.256")
189         },
190         "_mm_maskload_epi32" => Intrinsic {
191             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x4, Some(&::I8), true); &PTR }, &::I32x4]; &INPUTS },
192             output: &::I32x4,
193             definition: Named("llvm.x86.avx2.maskload.d")
194         },
195         "_mm_maskload_epi64" => Intrinsic {
196             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x2, Some(&::I8), true); &PTR }, &::I64x2]; &INPUTS },
197             output: &::I64x2,
198             definition: Named("llvm.x86.avx2.maskload.q")
199         },
200         "_mm256_maskload_epi32" => Intrinsic {
201             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x8, Some(&::I8), true); &PTR }, &::I32x8]; &INPUTS },
202             output: &::I32x8,
203             definition: Named("llvm.x86.avx2.maskload.d.256")
204         },
205         "_mm256_maskload_epi64" => Intrinsic {
206             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x4, Some(&::I8), true); &PTR }, &::I64x4]; &INPUTS },
207             output: &::I64x4,
208             definition: Named("llvm.x86.avx2.maskload.q.256")
209         },
210         "_mm_maskstore_epi32" => Intrinsic {
211             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x4, &::I32x4]; &INPUTS },
212             output: &::VOID,
213             definition: Named("llvm.x86.avx2.maskstore.d")
214         },
215         "_mm_maskstore_epi64" => Intrinsic {
216             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x2, &::I64x2]; &INPUTS },
217             output: &::VOID,
218             definition: Named("llvm.x86.avx2.maskstore.q")
219         },
220         "_mm256_maskstore_epi32" => Intrinsic {
221             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x8, &::I32x8]; &INPUTS },
222             output: &::VOID,
223             definition: Named("llvm.x86.avx2.maskstore.d.256")
224         },
225         "_mm256_maskstore_epi64" => Intrinsic {
226             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x4, &::I64x4]; &INPUTS },
227             output: &::VOID,
228             definition: Named("llvm.x86.avx2.maskstore.q.256")
229         },
230         "_mm256_max_epi8" => Intrinsic {
231             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
232             output: &::I8x32,
233             definition: Named("llvm.x86.avx2.pmaxs.b")
234         },
235         "_mm256_max_epu8" => Intrinsic {
236             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
237             output: &::U8x32,
238             definition: Named("llvm.x86.avx2.pmaxu.b")
239         },
240         "_mm256_max_epi16" => Intrinsic {
241             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
242             output: &::I16x16,
243             definition: Named("llvm.x86.avx2.pmaxs.w")
244         },
245         "_mm256_max_epu16" => Intrinsic {
246             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
247             output: &::U16x16,
248             definition: Named("llvm.x86.avx2.pmaxu.w")
249         },
250         "_mm256_max_epi32" => Intrinsic {
251             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
252             output: &::I32x8,
253             definition: Named("llvm.x86.avx2.pmaxs.d")
254         },
255         "_mm256_max_epu32" => Intrinsic {
256             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
257             output: &::U32x8,
258             definition: Named("llvm.x86.avx2.pmaxu.d")
259         },
260         "_mm256_min_epi8" => Intrinsic {
261             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
262             output: &::I8x32,
263             definition: Named("llvm.x86.avx2.pmins.b")
264         },
265         "_mm256_min_epu8" => Intrinsic {
266             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
267             output: &::U8x32,
268             definition: Named("llvm.x86.avx2.pminu.b")
269         },
270         "_mm256_min_epi16" => Intrinsic {
271             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
272             output: &::I16x16,
273             definition: Named("llvm.x86.avx2.pmins.w")
274         },
275         "_mm256_min_epu16" => Intrinsic {
276             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
277             output: &::U16x16,
278             definition: Named("llvm.x86.avx2.pminu.w")
279         },
280         "_mm256_min_epi32" => Intrinsic {
281             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
282             output: &::I32x8,
283             definition: Named("llvm.x86.avx2.pmins.d")
284         },
285         "_mm256_min_epu32" => Intrinsic {
286             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
287             output: &::U32x8,
288             definition: Named("llvm.x86.avx2.pminu.d")
289         },
290         "_mm256_movemask_epi8" => Intrinsic {
291             inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
292             output: &::I32,
293             definition: Named("llvm.x86.avx2.pmovmskb")
294         },
295         "_mm256_mpsadbw_epu8" => Intrinsic {
296             inputs: { static INPUTS: [&'static Type; 3] = [&::U8x32, &::U8x32, &::I32_8]; &INPUTS },
297             output: &::U16x16,
298             definition: Named("llvm.x86.avx2.mpsadbw")
299         },
300         "_mm256_mul_epi64" => Intrinsic {
301             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
302             output: &::I64x4,
303             definition: Named("llvm.x86.avx2.pmulq.dq")
304         },
305         "_mm256_mul_epu64" => Intrinsic {
306             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
307             output: &::U64x4,
308             definition: Named("llvm.x86.avx2.pmulq.dq")
309         },
310         "_mm256_mulhi_epi16" => Intrinsic {
311             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
312             output: &::I16x16,
313             definition: Named("llvm.x86.avx2.pmulhw.w")
314         },
315         "_mm256_mulhi_epu16" => Intrinsic {
316             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
317             output: &::U16x16,
318             definition: Named("llvm.x86.avx2.pmulhw.w")
319         },
320         "_mm256_mulhrs_epi16" => Intrinsic {
321             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
322             output: &::I16x16,
323             definition: Named("llvm.x86.avx2.pmul.hr.sw")
324         },
325         "_mm256_packs_epi16" => Intrinsic {
326             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
327             output: &::I8x32,
328             definition: Named("llvm.x86.avx2.packsswb")
329         },
330         "_mm256_packus_epi16" => Intrinsic {
331             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
332             output: &::U8x32,
333             definition: Named("llvm.x86.avx2.packuswb")
334         },
335         "_mm256_packs_epi32" => Intrinsic {
336             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
337             output: &::I16x16,
338             definition: Named("llvm.x86.avx2.packssdw")
339         },
340         "_mm256_packus_epi32" => Intrinsic {
341             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
342             output: &::U16x16,
343             definition: Named("llvm.x86.avx2.packusdw")
344         },
345         "_mm256_permutevar8x32_epi32" => Intrinsic {
346             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
347             output: &::I32x8,
348             definition: Named("llvm.x86.avx2.permd")
349         },
350         "_mm256_permutevar8x32_ps" => Intrinsic {
351             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
352             output: &::F32x8,
353             definition: Named("llvm.x86.avx2.permps")
354         },
355         "_mm256_sad_epu8" => Intrinsic {
356             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
357             output: &::U8x32,
358             definition: Named("llvm.x86.avx2.psad.bw")
359         },
360         "_mm256_shuffle_epi8" => Intrinsic {
361             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
362             output: &::I8x32,
363             definition: Named("llvm.x86.avx2.pshuf.b")
364         },
365         "_mm256_sign_epi8" => Intrinsic {
366             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
367             output: &::I8x32,
368             definition: Named("llvm.x86.avx2.psign.b")
369         },
370         "_mm256_sign_epi16" => Intrinsic {
371             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
372             output: &::I16x16,
373             definition: Named("llvm.x86.avx2.psign.w")
374         },
375         "_mm256_sign_epi32" => Intrinsic {
376             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
377             output: &::I32x8,
378             definition: Named("llvm.x86.avx2.psign.d")
379         },
380         "_mm256_subs_epi8" => Intrinsic {
381             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
382             output: &::I8x32,
383             definition: Named("llvm.x86.avx2.psubs.b")
384         },
385         "_mm256_subs_epu8" => Intrinsic {
386             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
387             output: &::U8x32,
388             definition: Named("llvm.x86.avx2.psubus.b")
389         },
390         "_mm256_subs_epi16" => Intrinsic {
391             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
392             output: &::I16x16,
393             definition: Named("llvm.x86.avx2.psubs.w")
394         },
395         "_mm256_subs_epu16" => Intrinsic {
396             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
397             output: &::U16x16,
398             definition: Named("llvm.x86.avx2.psubus.w")
399         },
400         "_mm256_addsub_ps" => Intrinsic {
401             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
402             output: &::F32x8,
403             definition: Named("llvm.x86.avx.addsub.ps.256")
404         },
405         "_mm256_addsub_pd" => Intrinsic {
406             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
407             output: &::F64x4,
408             definition: Named("llvm.x86.avx.addsub.pd.256")
409         },
410         "_mm256_blendv_ps" => Intrinsic {
411             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
412             output: &::F32x8,
413             definition: Named("llvm.x86.avx.blendv.ps.256")
414         },
415         "_mm256_blendv_pd" => Intrinsic {
416             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
417             output: &::F64x4,
418             definition: Named("llvm.x86.avx.blendv.pd.256")
419         },
420         "_mm256_broadcast_ps" => Intrinsic {
421             inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
422             output: &::F32x8,
423             definition: Named("llvm.x86.avx.vbroadcastf128.ps.256")
424         },
425         "_mm256_broadcast_pd" => Intrinsic {
426             inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
427             output: &::F64x4,
428             definition: Named("llvm.x86.avx.vbroadcastf128.pd.256")
429         },
430         "_mm256_cmp_ps" => Intrinsic {
431             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I8]; &INPUTS },
432             output: &::F32x8,
433             definition: Named("llvm.x86.avx.cmp.ps.256")
434         },
435         "_mm256_cmp_pd" => Intrinsic {
436             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::I8]; &INPUTS },
437             output: &::F64x4,
438             definition: Named("llvm.x86.avx.cmp.pd.256")
439         },
440         "_mm256_cvtepi32_pd" => Intrinsic {
441             inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
442             output: &::F64x4,
443             definition: Named("llvm.x86.avx.cvtdq2.pd.256")
444         },
445         "_mm256_cvtepi32_ps" => Intrinsic {
446             inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
447             output: &::F32x8,
448             definition: Named("llvm.x86.avx.cvtdq2.ps.256")
449         },
450         "_mm256_cvtpd_epi32" => Intrinsic {
451             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
452             output: &::I32x4,
453             definition: Named("llvm.x86.avx.cvt.pd2dq.256")
454         },
455         "_mm256_cvtpd_ps" => Intrinsic {
456             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
457             output: &::F32x4,
458             definition: Named("llvm.x86.avx.cvt.pd2.ps.256")
459         },
460         "_mm256_cvtps_epi32" => Intrinsic {
461             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
462             output: &::I32x8,
463             definition: Named("llvm.x86.avx.cvt.ps2dq.256")
464         },
465         "_mm256_cvtps_pd" => Intrinsic {
466             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
467             output: &::F64x4,
468             definition: Named("llvm.x86.avx.cvt.ps2.pd.256")
469         },
470         "_mm256_cvttpd_epi32" => Intrinsic {
471             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
472             output: &::I32x4,
473             definition: Named("llvm.x86.avx.cvtt.pd2dq.256")
474         },
475         "_mm256_cvttps_epi32" => Intrinsic {
476             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
477             output: &::I32x8,
478             definition: Named("llvm.x86.avx.cvtt.ps2dq.256")
479         },
480         "_mm256_dp_ps" => Intrinsic {
481             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I32_8]; &INPUTS },
482             output: &::F32x8,
483             definition: Named("llvm.x86.avx.dp.ps.256")
484         },
485         "_mm256_hadd_ps" => Intrinsic {
486             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
487             output: &::F32x8,
488             definition: Named("llvm.x86.avx.hadd.ps.256")
489         },
490         "_mm256_hadd_pd" => Intrinsic {
491             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
492             output: &::F64x4,
493             definition: Named("llvm.x86.avx.hadd.pd.256")
494         },
495         "_mm256_hsub_ps" => Intrinsic {
496             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
497             output: &::F32x8,
498             definition: Named("llvm.x86.avx.hsub.ps.256")
499         },
500         "_mm256_hsub_pd" => Intrinsic {
501             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
502             output: &::F64x4,
503             definition: Named("llvm.x86.avx.hsub.pd.256")
504         },
505         "_mm256_max_ps" => Intrinsic {
506             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
507             output: &::F32x8,
508             definition: Named("llvm.x86.avx.max.ps.256")
509         },
510         "_mm256_max_pd" => Intrinsic {
511             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
512             output: &::F64x4,
513             definition: Named("llvm.x86.avx.max.pd.256")
514         },
515         "_mm_maskload_ps" => Intrinsic {
516             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4_F32]; &INPUTS },
517             output: &::F32x4,
518             definition: Named("llvm.x86.avx.maskload.ps")
519         },
520         "_mm_maskload_pd" => Intrinsic {
521             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2_F64]; &INPUTS },
522             output: &::F64x2,
523             definition: Named("llvm.x86.avx.maskload.pd")
524         },
525         "_mm256_maskload_ps" => Intrinsic {
526             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8_F32]; &INPUTS },
527             output: &::F32x8,
528             definition: Named("llvm.x86.avx.maskload.ps.256")
529         },
530         "_mm256_maskload_pd" => Intrinsic {
531             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4_F64]; &INPUTS },
532             output: &::F64x4,
533             definition: Named("llvm.x86.avx.maskload.pd.256")
534         },
535         "_mm_maskstore_ps" => Intrinsic {
536             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x4_F32, &::F32x4]; &INPUTS },
537             output: &::VOID,
538             definition: Named("llvm.x86.avx.maskstore.ps")
539         },
540         "_mm_maskstore_pd" => Intrinsic {
541             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x2_F64, &::F64x2]; &INPUTS },
542             output: &::VOID,
543             definition: Named("llvm.x86.avx.maskstore.pd")
544         },
545         "_mm256_maskstore_ps" => Intrinsic {
546             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x8_F32, &::F32x8]; &INPUTS },
547             output: &::VOID,
548             definition: Named("llvm.x86.avx.maskstore.ps.256")
549         },
550         "_mm256_maskstore_pd" => Intrinsic {
551             inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x4_F64, &::F64x4]; &INPUTS },
552             output: &::VOID,
553             definition: Named("llvm.x86.avx.maskstore.pd.256")
554         },
555         "_mm256_min_ps" => Intrinsic {
556             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
557             output: &::F32x8,
558             definition: Named("llvm.x86.avx.min.ps.256")
559         },
560         "_mm256_min_pd" => Intrinsic {
561             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
562             output: &::F64x4,
563             definition: Named("llvm.x86.avx.min.pd.256")
564         },
565         "_mm256_movemask_ps" => Intrinsic {
566             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
567             output: &::I32,
568             definition: Named("llvm.x86.avx.movmsk.ps.256")
569         },
570         "_mm256_movemask_pd" => Intrinsic {
571             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
572             output: &::I32,
573             definition: Named("llvm.x86.avx.movmsk.pd.256")
574         },
575         "_mm_permutevar_ps" => Intrinsic {
576             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::I32x4]; &INPUTS },
577             output: &::F32x4,
578             definition: Named("llvm.x86.avx.vpermilvar.ps")
579         },
580         "_mm_permutevar_pd" => Intrinsic {
581             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::I64x2]; &INPUTS },
582             output: &::F64x2,
583             definition: Named("llvm.x86.avx.vpermilvar.pd")
584         },
585         "_mm256_permutevar_ps" => Intrinsic {
586             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
587             output: &::F32x8,
588             definition: Named("llvm.x86.avx.vpermilvar.ps.256")
589         },
590         "_mm256_permutevar_pd" => Intrinsic {
591             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::I64x4]; &INPUTS },
592             output: &::F64x4,
593             definition: Named("llvm.x86.avx.vpermilvar.pd.256")
594         },
595         "_mm256_rcp_ps" => Intrinsic {
596             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
597             output: &::F32x8,
598             definition: Named("llvm.x86.avx.rcp.ps.256")
599         },
600         "_mm256_rsqrt_ps" => Intrinsic {
601             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
602             output: &::F32x8,
603             definition: Named("llvm.x86.avx.rsqrt.ps.256")
604         },
605         "_mm256_storeu_ps" => Intrinsic {
606             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32x8, Some(&::U8), false); &PTR }, &::F32x8]; &INPUTS },
607             output: &::VOID,
608             definition: Named("llvm.x86.avx.storeu.ps.256")
609         },
610         "_mm256_storeu_pd" => Intrinsic {
611             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64x4, Some(&::U8), false); &PTR }, &::F64x4]; &INPUTS },
612             output: &::VOID,
613             definition: Named("llvm.x86.avx.storeu.ps.256")
614         },
615         "_mm256_storeu_si256" => Intrinsic {
616             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x32, Some(&::U8), false); &PTR }, &::U8x32]; &INPUTS },
617             output: &::VOID,
618             definition: Named("llvm.x86.avx.storeu.dq.256")
619         },
620         "_mm256_sqrt_ps" => Intrinsic {
621             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
622             output: &::F32x8,
623             definition: Named("llvm.sqrt.v8f32")
624         },
625         "_mm256_sqrt_pd" => Intrinsic {
626             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
627             output: &::F64x4,
628             definition: Named("llvm.sqrt.v4f64")
629         },
630         "_mm_testc_ps" => Intrinsic {
631             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
632             output: &::I32,
633             definition: Named("llvm.x86.avx.vtestc.ps")
634         },
635         "_mm256_testc_ps" => Intrinsic {
636             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
637             output: &::I32,
638             definition: Named("llvm.x86.avx.vtestc.ps.256")
639         },
640         "_mm_testc_pd" => Intrinsic {
641             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
642             output: &::I32,
643             definition: Named("llvm.x86.avx.vtestc.pd")
644         },
645         "_mm256_testc_pd" => Intrinsic {
646             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
647             output: &::I32,
648             definition: Named("llvm.x86.avx.vtestc.pd.256")
649         },
650         "_mm256_testc_si256" => Intrinsic {
651             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
652             output: &::I32,
653             definition: Named("llvm.x86.avx.ptestc.256")
654         },
655         "_mm_testnzc_ps" => Intrinsic {
656             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
657             output: &::I32,
658             definition: Named("llvm.x86.avx.vtestnzc.ps")
659         },
660         "_mm256_testnzc_ps" => Intrinsic {
661             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
662             output: &::I32,
663             definition: Named("llvm.x86.avx.vtestnzc.ps.256")
664         },
665         "_mm_testnzc_pd" => Intrinsic {
666             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
667             output: &::I32,
668             definition: Named("llvm.x86.avx.vtestnzc.pd")
669         },
670         "_mm256_testnzc_pd" => Intrinsic {
671             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
672             output: &::I32,
673             definition: Named("llvm.x86.avx.vtestnzc.pd.256")
674         },
675         "_mm256_testnzc_si256" => Intrinsic {
676             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
677             output: &::I32,
678             definition: Named("llvm.x86.avx.ptestnzc.256")
679         },
680         "_mm_testz_ps" => Intrinsic {
681             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
682             output: &::I32,
683             definition: Named("llvm.x86.avx.vtestz.ps")
684         },
685         "_mm256_testz_ps" => Intrinsic {
686             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
687             output: &::I32,
688             definition: Named("llvm.x86.avx.vtestz.ps.256")
689         },
690         "_mm_testz_pd" => Intrinsic {
691             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
692             output: &::I32,
693             definition: Named("llvm.x86.avx.vtestz.pd")
694         },
695         "_mm256_testz_pd" => Intrinsic {
696             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
697             output: &::I32,
698             definition: Named("llvm.x86.avx.vtestz.pd.256")
699         },
700         "_mm256_testz_si256" => Intrinsic {
701             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
702             output: &::I32,
703             definition: Named("llvm.x86.avx.ptestz.256")
704         },
705         "_mm256_zeroall" => Intrinsic {
706             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
707             output: &::VOID,
708             definition: Named("llvm.x86.avx.vzeroall")
709         },
710         "_mm256_zeroupper" => Intrinsic {
711             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
712             output: &::VOID,
713             definition: Named("llvm.x86.avx.vzeroupper")
714         },
715         "_bmi2_bzhi_32" => Intrinsic {
716             inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
717             output: &::U32,
718             definition: Named("llvm.x86.bmi.bzhi.32")
719         },
720         "_bmi2_bzhi_64" => Intrinsic {
721             inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
722             output: &::U64,
723             definition: Named("llvm.x86.bmi.bzhi.64")
724         },
725         "_bmi2_pdep_32" => Intrinsic {
726             inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
727             output: &::U32,
728             definition: Named("llvm.x86.bmi.pdep.32")
729         },
730         "_bmi2_pdep_64" => Intrinsic {
731             inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
732             output: &::U64,
733             definition: Named("llvm.x86.bmi.pdep.64")
734         },
735         "_bmi2_pext_32" => Intrinsic {
736             inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
737             output: &::U32,
738             definition: Named("llvm.x86.bmi.pext.32")
739         },
740         "_bmi2_pext_64" => Intrinsic {
741             inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
742             output: &::U64,
743             definition: Named("llvm.x86.bmi.pext.64")
744         },
745         "_bmi_bextr_32" => Intrinsic {
746             inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
747             output: &::U32,
748             definition: Named("llvm.x86.bmi.bextr.32")
749         },
750         "_bmi_bextr_64" => Intrinsic {
751             inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
752             output: &::U64,
753             definition: Named("llvm.x86.bmi.bextr.64")
754         },
755         "_mm_fmadd_ps" => Intrinsic {
756             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
757             output: &::F32x4,
758             definition: Named("llvm.x86.fma.vfmadd.ps")
759         },
760         "_mm_fmadd_pd" => Intrinsic {
761             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
762             output: &::F64x2,
763             definition: Named("llvm.x86.fma.vfmadd.pd")
764         },
765         "_mm256_fmadd_ps" => Intrinsic {
766             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
767             output: &::F32x8,
768             definition: Named("llvm.x86.fma.vfmadd.ps.256")
769         },
770         "_mm256_fmadd_pd" => Intrinsic {
771             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
772             output: &::F64x4,
773             definition: Named("llvm.x86.fma.vfmadd.pd.256")
774         },
775         "_mm_fmaddsub_ps" => Intrinsic {
776             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
777             output: &::F32x4,
778             definition: Named("llvm.x86.fma.vfmaddsub.ps")
779         },
780         "_mm_fmaddsub_pd" => Intrinsic {
781             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
782             output: &::F64x2,
783             definition: Named("llvm.x86.fma.vfmaddsub.pd")
784         },
785         "_mm256_fmaddsub_ps" => Intrinsic {
786             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
787             output: &::F32x8,
788             definition: Named("llvm.x86.fma.vfmaddsub.ps.256")
789         },
790         "_mm256_fmaddsub_pd" => Intrinsic {
791             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
792             output: &::F64x4,
793             definition: Named("llvm.x86.fma.vfmaddsub.pd.256")
794         },
795         "_mm_fmsub_ps" => Intrinsic {
796             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
797             output: &::F32x4,
798             definition: Named("llvm.x86.fma.vfmsub.ps")
799         },
800         "_mm_fmsub_pd" => Intrinsic {
801             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
802             output: &::F64x2,
803             definition: Named("llvm.x86.fma.vfmsub.pd")
804         },
805         "_mm256_fmsub_ps" => Intrinsic {
806             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
807             output: &::F32x8,
808             definition: Named("llvm.x86.fma.vfmsub.ps.256")
809         },
810         "_mm256_fmsub_pd" => Intrinsic {
811             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
812             output: &::F64x4,
813             definition: Named("llvm.x86.fma.vfmsub.pd.256")
814         },
815         "_mm_fmsubadd_ps" => Intrinsic {
816             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
817             output: &::F32x4,
818             definition: Named("llvm.x86.fma.vfmsubadd.ps")
819         },
820         "_mm_fmsubadd_pd" => Intrinsic {
821             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
822             output: &::F64x2,
823             definition: Named("llvm.x86.fma.vfmsubadd.pd")
824         },
825         "_mm256_fmsubadd_ps" => Intrinsic {
826             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
827             output: &::F32x8,
828             definition: Named("llvm.x86.fma.vfmsubadd.ps.256")
829         },
830         "_mm256_fmsubadd_pd" => Intrinsic {
831             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
832             output: &::F64x4,
833             definition: Named("llvm.x86.fma.vfmsubadd.pd.256")
834         },
835         "_mm_fnmadd_ps" => Intrinsic {
836             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
837             output: &::F32x4,
838             definition: Named("llvm.x86.fma.vfnmadd.ps")
839         },
840         "_mm_fnmadd_pd" => Intrinsic {
841             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
842             output: &::F64x2,
843             definition: Named("llvm.x86.fma.vfnmadd.pd")
844         },
845         "_mm256_fnmadd_ps" => Intrinsic {
846             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
847             output: &::F32x8,
848             definition: Named("llvm.x86.fma.vfnmadd.ps.256")
849         },
850         "_mm256_fnmadd_pd" => Intrinsic {
851             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
852             output: &::F64x4,
853             definition: Named("llvm.x86.fma.vfnmadd.pd.256")
854         },
855         "_mm_fnmsub_ps" => Intrinsic {
856             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
857             output: &::F32x4,
858             definition: Named("llvm.x86.fma.vfnmsub.ps")
859         },
860         "_mm_fnmsub_pd" => Intrinsic {
861             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
862             output: &::F64x2,
863             definition: Named("llvm.x86.fma.vfnmsub.pd")
864         },
865         "_mm256_fnmsub_ps" => Intrinsic {
866             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
867             output: &::F32x8,
868             definition: Named("llvm.x86.fma.vfnmsub.ps.256")
869         },
870         "_mm256_fnmsub_pd" => Intrinsic {
871             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
872             output: &::F64x4,
873             definition: Named("llvm.x86.fma.vfnmsub.pd.256")
874         },
875         "_rdrand16_step" => Intrinsic {
876             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
877             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
878             definition: Named("llvm.x86.rdrand.16")
879         },
880         "_rdrand32_step" => Intrinsic {
881             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
882             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
883             definition: Named("llvm.x86.rdrand.32")
884         },
885         "_rdrand64_step" => Intrinsic {
886             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
887             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
888             definition: Named("llvm.x86.rdrand.64")
889         },
890         "_rdseed16_step" => Intrinsic {
891             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
892             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
893             definition: Named("llvm.x86.rdseed.16")
894         },
895         "_rdseed32_step" => Intrinsic {
896             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
897             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
898             definition: Named("llvm.x86.rdseed.32")
899         },
900         "_rdseed64_step" => Intrinsic {
901             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
902             output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
903             definition: Named("llvm.x86.rdseed.64")
904         },
905         "_mm_adds_epi8" => Intrinsic {
906             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
907             output: &::I8x16,
908             definition: Named("llvm.x86.sse2.padds.b")
909         },
910         "_mm_adds_epu8" => Intrinsic {
911             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
912             output: &::U8x16,
913             definition: Named("llvm.x86.sse2.paddus.b")
914         },
915         "_mm_adds_epi16" => Intrinsic {
916             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
917             output: &::I16x8,
918             definition: Named("llvm.x86.sse2.padds.w")
919         },
920         "_mm_adds_epu16" => Intrinsic {
921             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
922             output: &::U16x8,
923             definition: Named("llvm.x86.sse2.paddus.w")
924         },
925         "_mm_avg_epu8" => Intrinsic {
926             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
927             output: &::U8x16,
928             definition: Named("llvm.x86.sse2.pavg.b")
929         },
930         "_mm_avg_epu16" => Intrinsic {
931             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
932             output: &::U16x8,
933             definition: Named("llvm.x86.sse2.pavg.w")
934         },
935         "_mm_lfence" => Intrinsic {
936             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
937             output: &::VOID,
938             definition: Named("llvm.x86.sse2.lfence")
939         },
940         "_mm_madd_epi16" => Intrinsic {
941             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
942             output: &::I32x4,
943             definition: Named("llvm.x86.sse2.pmadd.wd")
944         },
945         "_mm_maskmoveu_si128" => Intrinsic {
946             inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, { static PTR: Type = Type::Pointer(&::U8, None, false); &PTR }]; &INPUTS },
947             output: &::VOID,
948             definition: Named("llvm.x86.sse2.maskmov.dqu")
949         },
950         "_mm_max_epi16" => Intrinsic {
951             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
952             output: &::I16x8,
953             definition: Named("llvm.x86.sse2.pmaxs.w")
954         },
955         "_mm_max_epu8" => Intrinsic {
956             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
957             output: &::U8x16,
958             definition: Named("llvm.x86.sse2.pmaxu.b")
959         },
960         "_mm_max_pd" => Intrinsic {
961             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
962             output: &::F64x2,
963             definition: Named("llvm.x86.sse2.max.pd")
964         },
965         "_mm_mfence" => Intrinsic {
966             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
967             output: &::VOID,
968             definition: Named("llvm.x86.sse2.fence")
969         },
970         "_mm_min_epi16" => Intrinsic {
971             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
972             output: &::I16x8,
973             definition: Named("llvm.x86.sse2.pmins.w")
974         },
975         "_mm_min_epu8" => Intrinsic {
976             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
977             output: &::U8x16,
978             definition: Named("llvm.x86.sse2.pminu.b")
979         },
980         "_mm_min_pd" => Intrinsic {
981             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
982             output: &::F64x2,
983             definition: Named("llvm.x86.sse2.min.pd")
984         },
985         "_mm_movemask_pd" => Intrinsic {
986             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
987             output: &::I32,
988             definition: Named("llvm.x86.sse2.movmsk.pd")
989         },
990         "_mm_movemask_epi8" => Intrinsic {
991             inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
992             output: &::I32,
993             definition: Named("llvm.x86.sse2.pmovmskb.128")
994         },
995         "_mm_mul_epu32" => Intrinsic {
996             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
997             output: &::U64x2,
998             definition: Named("llvm.x86.sse2.pmulu.dq")
999         },
1000         "_mm_mulhi_epi16" => Intrinsic {
1001             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1002             output: &::I16x8,
1003             definition: Named("llvm.x86.sse2.pmulh.w")
1004         },
1005         "_mm_mulhi_epu16" => Intrinsic {
1006             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
1007             output: &::U16x8,
1008             definition: Named("llvm.x86.sse2.pmulhu.w")
1009         },
1010         "_mm_packs_epi16" => Intrinsic {
1011             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1012             output: &::I8x16,
1013             definition: Named("llvm.x86.sse2.packsswb.128")
1014         },
1015         "_mm_packs_epi32" => Intrinsic {
1016             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1017             output: &::I16x8,
1018             definition: Named("llvm.x86.sse2.packssdw.128")
1019         },
1020         "_mm_packus_epi16" => Intrinsic {
1021             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1022             output: &::U8x16,
1023             definition: Named("llvm.x86.sse2.packuswb.128")
1024         },
1025         "_mm_sad_epu8" => Intrinsic {
1026             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
1027             output: &::U64x2,
1028             definition: Named("llvm.x86.sse2.psad.bw")
1029         },
1030         "_mm_sfence" => Intrinsic {
1031             inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
1032             output: &::VOID,
1033             definition: Named("llvm.x86.sse2.sfence")
1034         },
1035         "_mm_sqrt_pd" => Intrinsic {
1036             inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
1037             output: &::F64x2,
1038             definition: Named("llvm.sqrt.v2f64")
1039         },
1040         "_mm_storeu_pd" => Intrinsic {
1041             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::U8), false); &PTR }, &::F64x2]; &INPUTS },
1042             output: &::VOID,
1043             definition: Named("llvm.x86.sse2.storeu.pd")
1044         },
1045         "_mm_storeu_si128" => Intrinsic {
1046             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::U8), false); &PTR }, &::U8x16]; &INPUTS },
1047             output: &::VOID,
1048             definition: Named("llvm.x86.sse2.storeu.dq")
1049         },
1050         "_mm_subs_epi8" => Intrinsic {
1051             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
1052             output: &::I8x16,
1053             definition: Named("llvm.x86.sse2.psubs.b")
1054         },
1055         "_mm_subs_epu8" => Intrinsic {
1056             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
1057             output: &::U8x16,
1058             definition: Named("llvm.x86.sse2.psubus.b")
1059         },
1060         "_mm_subs_epi16" => Intrinsic {
1061             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1062             output: &::I16x8,
1063             definition: Named("llvm.x86.sse2.psubs.w")
1064         },
1065         "_mm_subs_epu16" => Intrinsic {
1066             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
1067             output: &::U16x8,
1068             definition: Named("llvm.x86.sse2.psubus.w")
1069         },
1070         "_mm_addsub_ps" => Intrinsic {
1071             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
1072             output: &::F32x4,
1073             definition: Named("llvm.x86.sse3.addsub.ps")
1074         },
1075         "_mm_addsub_pd" => Intrinsic {
1076             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
1077             output: &::F64x2,
1078             definition: Named("llvm.x86.sse3.addsub.pd")
1079         },
1080         "_mm_hadd_ps" => Intrinsic {
1081             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
1082             output: &::F32x4,
1083             definition: Named("llvm.x86.sse3.hadd.ps")
1084         },
1085         "_mm_hadd_pd" => Intrinsic {
1086             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
1087             output: &::F64x2,
1088             definition: Named("llvm.x86.sse3.hadd.pd")
1089         },
1090         "_mm_hsub_ps" => Intrinsic {
1091             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
1092             output: &::F32x4,
1093             definition: Named("llvm.x86.sse3.hsub.ps")
1094         },
1095         "_mm_hsub_pd" => Intrinsic {
1096             inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
1097             output: &::F64x2,
1098             definition: Named("llvm.x86.sse3.hsub.pd")
1099         },
1100         "_mm_lddqu_si128" => Intrinsic {
1101             inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::I8), true); &PTR }]; &INPUTS },
1102             output: &::U8x16,
1103             definition: Named("llvm.x86.sse3.ldu.dq")
1104         },
1105         "_mm_dp_ps" => Intrinsic {
1106             inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::I32_8]; &INPUTS },
1107             output: &::F32x4,
1108             definition: Named("llvm.x86.sse41.dpps")
1109         },
1110         "_mm_dp_pd" => Intrinsic {
1111             inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::I32_8]; &INPUTS },
1112             output: &::F64x2,
1113             definition: Named("llvm.x86.sse41.dppd")
1114         },
1115         "_mm_max_epi8" => Intrinsic {
1116             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
1117             output: &::I8x16,
1118             definition: Named("llvm.x86.sse41.pmaxsb")
1119         },
1120         "_mm_max_epu16" => Intrinsic {
1121             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
1122             output: &::U16x8,
1123             definition: Named("llvm.x86.sse41.pmaxuw")
1124         },
1125         "_mm_max_epi32" => Intrinsic {
1126             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1127             output: &::I32x4,
1128             definition: Named("llvm.x86.sse41.pmaxsd")
1129         },
1130         "_mm_max_epu32" => Intrinsic {
1131             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
1132             output: &::U32x4,
1133             definition: Named("llvm.x86.sse41.pmaxud")
1134         },
1135         "_mm_min_epi8" => Intrinsic {
1136             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
1137             output: &::I8x16,
1138             definition: Named("llvm.x86.sse41.pminsb")
1139         },
1140         "_mm_min_epu16" => Intrinsic {
1141             inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
1142             output: &::U16x8,
1143             definition: Named("llvm.x86.sse41.pminuw")
1144         },
1145         "_mm_min_epi32" => Intrinsic {
1146             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1147             output: &::I32x4,
1148             definition: Named("llvm.x86.sse41.pminsd")
1149         },
1150         "_mm_min_epu32" => Intrinsic {
1151             inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
1152             output: &::U32x4,
1153             definition: Named("llvm.x86.sse41.pminud")
1154         },
1155         "_mm_minpos_epu16" => Intrinsic {
1156             inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
1157             output: &::U16x8,
1158             definition: Named("llvm.x86.sse41.phminposuw")
1159         },
1160         "_mm_mpsadbw_epu8" => Intrinsic {
1161             inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::I32_8]; &INPUTS },
1162             output: &::U16x8,
1163             definition: Named("llvm.x86.sse41.mpsadbw")
1164         },
1165         "_mm_mul_epi32" => Intrinsic {
1166             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1167             output: &::I64x2,
1168             definition: Named("llvm.x86.sse41.pmuldq")
1169         },
1170         "_mm_packus_epi32" => Intrinsic {
1171             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1172             output: &::U16x8,
1173             definition: Named("llvm.x86.sse41.packusdw")
1174         },
1175         "_mm_testc_si128" => Intrinsic {
1176             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
1177             output: &::I32,
1178             definition: Named("llvm.x86.sse41.ptestc")
1179         },
1180         "_mm_testnzc_si128" => Intrinsic {
1181             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
1182             output: &::I32,
1183             definition: Named("llvm.x86.sse41.ptestnzc")
1184         },
1185         "_mm_testz_si128" => Intrinsic {
1186             inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
1187             output: &::I32,
1188             definition: Named("llvm.x86.sse41.ptestz")
1189         },
1190         "_mm_cmpestra" => Intrinsic {
1191             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1192             output: &::I32,
1193             definition: Named("llvm.x86.sse42.pcmpestria128")
1194         },
1195         "_mm_cmpestrc" => Intrinsic {
1196             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1197             output: &::I32,
1198             definition: Named("llvm.x86.sse42.pcmpestric128")
1199         },
1200         "_mm_cmpestri" => Intrinsic {
1201             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1202             output: &::I32,
1203             definition: Named("llvm.x86.sse42.pcmpestri128")
1204         },
1205         "_mm_cmpestrm" => Intrinsic {
1206             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1207             output: &::I8x16,
1208             definition: Named("llvm.x86.sse42.pcmpestrm128")
1209         },
1210         "_mm_cmpestro" => Intrinsic {
1211             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1212             output: &::I32,
1213             definition: Named("llvm.x86.sse42.pcmpestrio128")
1214         },
1215         "_mm_cmpestrs" => Intrinsic {
1216             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1217             output: &::I32,
1218             definition: Named("llvm.x86.sse42.pcmpestris128")
1219         },
1220         "_mm_cmpestrz" => Intrinsic {
1221             inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
1222             output: &::I32,
1223             definition: Named("llvm.x86.sse42.pcmpestriz128")
1224         },
1225         "_mm_cmpistra" => Intrinsic {
1226             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1227             output: &::I32,
1228             definition: Named("llvm.x86.sse42.pcmpistria128")
1229         },
1230         "_mm_cmpistrc" => Intrinsic {
1231             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1232             output: &::I32,
1233             definition: Named("llvm.x86.sse42.pcmpistric128")
1234         },
1235         "_mm_cmpistri" => Intrinsic {
1236             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1237             output: &::I32,
1238             definition: Named("llvm.x86.sse42.pcmpistri128")
1239         },
1240         "_mm_cmpistrm" => Intrinsic {
1241             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1242             output: &::I8x16,
1243             definition: Named("llvm.x86.sse42.pcmpistrm128")
1244         },
1245         "_mm_cmpistro" => Intrinsic {
1246             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1247             output: &::I32,
1248             definition: Named("llvm.x86.sse42.pcmpistrio128")
1249         },
1250         "_mm_cmpistrs" => Intrinsic {
1251             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1252             output: &::I32,
1253             definition: Named("llvm.x86.sse42.pcmpistris128")
1254         },
1255         "_mm_cmpistrz" => Intrinsic {
1256             inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
1257             output: &::I32,
1258             definition: Named("llvm.x86.sse42.pcmpistriz128")
1259         },
1260         "_mm_movemask_ps" => Intrinsic {
1261             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
1262             output: &::I32,
1263             definition: Named("llvm.x86.sse.movmsk.ps")
1264         },
1265         "_mm_max_ps" => Intrinsic {
1266             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
1267             output: &::F32x4,
1268             definition: Named("llvm.x86.sse.max.ps")
1269         },
1270         "_mm_min_ps" => Intrinsic {
1271             inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
1272             output: &::F32x4,
1273             definition: Named("llvm.x86.sse.min.ps")
1274         },
1275         "_mm_rsqrt_ps" => Intrinsic {
1276             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
1277             output: &::F32x4,
1278             definition: Named("llvm.x86.sse.rsqrt.ps")
1279         },
1280         "_mm_rcp_ps" => Intrinsic {
1281             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
1282             output: &::F32x4,
1283             definition: Named("llvm.x86.sse.rcp.ps")
1284         },
1285         "_mm_sqrt_ps" => Intrinsic {
1286             inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
1287             output: &::F32x4,
1288             definition: Named("llvm.sqrt.v4f32")
1289         },
1290         "_mm_storeu_ps" => Intrinsic {
1291             inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::F32x4]; &INPUTS },
1292             output: &::VOID,
1293             definition: Named("llvm.x86.sse.storeu.ps")
1294         },
1295         "_mm_abs_epi8" => Intrinsic {
1296             inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
1297             output: &::I8x16,
1298             definition: Named("llvm.x86.ssse3.pabs.b.128")
1299         },
1300         "_mm_abs_epi16" => Intrinsic {
1301             inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
1302             output: &::I16x8,
1303             definition: Named("llvm.x86.ssse3.pabs.w.128")
1304         },
1305         "_mm_abs_epi32" => Intrinsic {
1306             inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
1307             output: &::I32x4,
1308             definition: Named("llvm.x86.ssse3.pabs.d.128")
1309         },
1310         "_mm_hadd_epi16" => Intrinsic {
1311             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1312             output: &::I16x8,
1313             definition: Named("llvm.x86.ssse3.phadd.w.128")
1314         },
1315         "_mm_hadd_epi32" => Intrinsic {
1316             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1317             output: &::I32x4,
1318             definition: Named("llvm.x86.ssse3.phadd.d.128")
1319         },
1320         "_mm_hadds_epi16" => Intrinsic {
1321             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1322             output: &::I16x8,
1323             definition: Named("llvm.x86.ssse3.phadd.sw.128")
1324         },
1325         "_mm_hsub_epi16" => Intrinsic {
1326             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1327             output: &::I16x8,
1328             definition: Named("llvm.x86.ssse3.phsub.w.128")
1329         },
1330         "_mm_hsub_epi32" => Intrinsic {
1331             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1332             output: &::I32x4,
1333             definition: Named("llvm.x86.ssse3.phsub.d.128")
1334         },
1335         "_mm_hsubs_epi16" => Intrinsic {
1336             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1337             output: &::I16x8,
1338             definition: Named("llvm.x86.ssse3.phsub.sw.128")
1339         },
1340         "_mm_maddubs_epi16" => Intrinsic {
1341             inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
1342             output: &::I16x8,
1343             definition: Named("llvm.x86.ssse3.pmadd.ub.sw.128")
1344         },
1345         "_mm_mulhrs_epi16" => Intrinsic {
1346             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1347             output: &::I16x8,
1348             definition: Named("llvm.x86.ssse3.pmul.hr.sw.128")
1349         },
1350         "_mm_shuffle_epi8" => Intrinsic {
1351             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
1352             output: &::I8x16,
1353             definition: Named("llvm.x86.ssse3.pshuf.b.128")
1354         },
1355         "_mm_sign_epi8" => Intrinsic {
1356             inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
1357             output: &::I8x16,
1358             definition: Named("llvm.x86.ssse3.psign.b.128")
1359         },
1360         "_mm_sign_epi16" => Intrinsic {
1361             inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
1362             output: &::I16x8,
1363             definition: Named("llvm.x86.ssse3.psign.w.128")
1364         },
1365         "_mm_sign_epi32" => Intrinsic {
1366             inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
1367             output: &::I32x4,
1368             definition: Named("llvm.x86.ssse3.psign.d.128")
1369         },
1370         "_tbm_bextri_u32" => Intrinsic {
1371             inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
1372             output: &::U32,
1373             definition: Named("llvm.x86.tbm.bextri.u32")
1374         },
1375         "_tbm_bextri_u64" => Intrinsic {
1376             inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
1377             output: &::U64,
1378             definition: Named("llvm.x86.tbm.bextri.u64")
1379         },
1380         _ => return None,
1381     })
1382 }