]> git.lizzy.rs Git - rust.git/blob - src/librustc_platform_intrinsics/x86.rs
Rollup merge of #31199 - steveklabnik:gh31181, r=Manishearth
[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, i, i_, u, u_, f, v, v_, agg, p, void};
17 use IntrinsicDef::Named;
18 use rustc::middle::ty;
19
20 // The default inlining settings trigger a pathological behaviour in
21 // LLVM, which causes makes compilation very slow. See #28273.
22 #[inline(never)]
23 pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option<Intrinsic> {
24     if !name.starts_with("x86_mm") { return None }
25     Some(match &name["x86_mm".len()..] {
26         "_movemask_ps" => Intrinsic {
27             inputs: vec![v(f(32), 4)],
28             output: i(32),
29             definition: Named("llvm.x86.sse.movmsk.ps")
30         },
31         "_max_ps" => Intrinsic {
32             inputs: vec![v(f(32), 4), v(f(32), 4)],
33             output: v(f(32), 4),
34             definition: Named("llvm.x86.sse.max.ps")
35         },
36         "_min_ps" => Intrinsic {
37             inputs: vec![v(f(32), 4), v(f(32), 4)],
38             output: v(f(32), 4),
39             definition: Named("llvm.x86.sse.min.ps")
40         },
41         "_rsqrt_ps" => Intrinsic {
42             inputs: vec![v(f(32), 4)],
43             output: v(f(32), 4),
44             definition: Named("llvm.x86.sse.rsqrt.ps")
45         },
46         "_rcp_ps" => Intrinsic {
47             inputs: vec![v(f(32), 4)],
48             output: v(f(32), 4),
49             definition: Named("llvm.x86.sse.rcp.ps")
50         },
51         "_sqrt_ps" => Intrinsic {
52             inputs: vec![v(f(32), 4)],
53             output: v(f(32), 4),
54             definition: Named("llvm.sqrt.v4f32")
55         },
56         "_storeu_ps" => Intrinsic {
57             inputs: vec![p(false, f(32), Some(i(8))), v(f(32), 4)],
58             output: void(),
59             definition: Named("llvm.x86.sse.storeu.ps")
60         },
61         "_adds_epi8" => Intrinsic {
62             inputs: vec![v(i(8), 16), v(i(8), 16)],
63             output: v(i(8), 16),
64             definition: Named("llvm.x86.sse2.padds.b")
65         },
66         "_adds_epu8" => Intrinsic {
67             inputs: vec![v(u(8), 16), v(u(8), 16)],
68             output: v(u(8), 16),
69             definition: Named("llvm.x86.sse2.paddus.b")
70         },
71         "_adds_epi16" => Intrinsic {
72             inputs: vec![v(i(16), 8), v(i(16), 8)],
73             output: v(i(16), 8),
74             definition: Named("llvm.x86.sse2.padds.w")
75         },
76         "_adds_epu16" => Intrinsic {
77             inputs: vec![v(u(16), 8), v(u(16), 8)],
78             output: v(u(16), 8),
79             definition: Named("llvm.x86.sse2.paddus.w")
80         },
81         "_avg_epu8" => Intrinsic {
82             inputs: vec![v(u(8), 16), v(u(8), 16)],
83             output: v(u(8), 16),
84             definition: Named("llvm.x86.sse2.pavg.b")
85         },
86         "_avg_epu16" => Intrinsic {
87             inputs: vec![v(u(16), 8), v(u(16), 8)],
88             output: v(u(16), 8),
89             definition: Named("llvm.x86.sse2.pavg.w")
90         },
91         "_lfence" => Intrinsic {
92             inputs: vec![],
93             output: void(),
94             definition: Named("llvm.x86.sse2.lfence")
95         },
96         "_madd_epi16" => Intrinsic {
97             inputs: vec![v(i(16), 8), v(i(16), 8)],
98             output: v(i(32), 4),
99             definition: Named("llvm.x86.sse2.pmadd.wd")
100         },
101         "_maskmoveu_si128" => Intrinsic {
102             inputs: vec![v(u(8), 16), v(u(8), 16), p(false, u(8), None)],
103             output: void(),
104             definition: Named("llvm.x86.sse2.maskmov.dqu")
105         },
106         "_max_epi16" => Intrinsic {
107             inputs: vec![v(i(16), 8), v(i(16), 8)],
108             output: v(i(16), 8),
109             definition: Named("llvm.x86.sse2.pmaxs.w")
110         },
111         "_max_epu8" => Intrinsic {
112             inputs: vec![v(u(8), 16), v(u(8), 16)],
113             output: v(u(8), 16),
114             definition: Named("llvm.x86.sse2.pmaxu.b")
115         },
116         "_max_pd" => Intrinsic {
117             inputs: vec![v(f(64), 2), v(f(64), 2)],
118             output: v(f(64), 2),
119             definition: Named("llvm.x86.sse2.max.pd")
120         },
121         "_mfence" => Intrinsic {
122             inputs: vec![],
123             output: void(),
124             definition: Named("llvm.x86.sse2.fence")
125         },
126         "_min_epi16" => Intrinsic {
127             inputs: vec![v(i(16), 8), v(i(16), 8)],
128             output: v(i(16), 8),
129             definition: Named("llvm.x86.sse2.pmins.w")
130         },
131         "_min_epu8" => Intrinsic {
132             inputs: vec![v(u(8), 16), v(u(8), 16)],
133             output: v(u(8), 16),
134             definition: Named("llvm.x86.sse2.pminu.b")
135         },
136         "_min_pd" => Intrinsic {
137             inputs: vec![v(f(64), 2), v(f(64), 2)],
138             output: v(f(64), 2),
139             definition: Named("llvm.x86.sse2.min.pd")
140         },
141         "_movemask_pd" => Intrinsic {
142             inputs: vec![v(f(64), 2)],
143             output: i(32),
144             definition: Named("llvm.x86.sse2.movmsk.pd")
145         },
146         "_movemask_epi8" => Intrinsic {
147             inputs: vec![v(i(8), 16)],
148             output: i(32),
149             definition: Named("llvm.x86.sse2.pmovmskb.128")
150         },
151         "_mul_epu32" => Intrinsic {
152             inputs: vec![v(u(32), 4), v(u(32), 4)],
153             output: v(u(64), 2),
154             definition: Named("llvm.x86.sse2.pmulu.dq")
155         },
156         "_mulhi_epi16" => Intrinsic {
157             inputs: vec![v(i(16), 8), v(i(16), 8)],
158             output: v(i(16), 8),
159             definition: Named("llvm.x86.sse2.pmulh.w")
160         },
161         "_mulhi_epu16" => Intrinsic {
162             inputs: vec![v(u(16), 8), v(u(16), 8)],
163             output: v(u(16), 8),
164             definition: Named("llvm.x86.sse2.pmulhu.w")
165         },
166         "_packs_epi16" => Intrinsic {
167             inputs: vec![v(i(16), 8), v(i(16), 8)],
168             output: v(i(8), 16),
169             definition: Named("llvm.x86.sse2.packsswb.128")
170         },
171         "_packs_epi32" => Intrinsic {
172             inputs: vec![v(i(32), 4), v(i(32), 4)],
173             output: v(i(16), 8),
174             definition: Named("llvm.x86.sse2.packssdw.128")
175         },
176         "_packus_epi16" => Intrinsic {
177             inputs: vec![v(i(16), 8), v(i(16), 8)],
178             output: v(u(8), 16),
179             definition: Named("llvm.x86.sse2.packuswb.128")
180         },
181         "_sad_epu8" => Intrinsic {
182             inputs: vec![v(u(8), 16), v(u(8), 16)],
183             output: v(u(64), 2),
184             definition: Named("llvm.x86.sse2.psad.bw")
185         },
186         "_sfence" => Intrinsic {
187             inputs: vec![],
188             output: void(),
189             definition: Named("llvm.x86.sse2.sfence")
190         },
191         "_sqrt_pd" => Intrinsic {
192             inputs: vec![v(f(64), 2)],
193             output: v(f(64), 2),
194             definition: Named("llvm.sqrt.v2f64")
195         },
196         "_storeu_pd" => Intrinsic {
197             inputs: vec![p(false, f(64), Some(u(8))), v(f(64), 2)],
198             output: void(),
199             definition: Named("llvm.x86.sse2.storeu.pd")
200         },
201         "_storeu_si128" => Intrinsic {
202             inputs: vec![p(false, v(u(8), 16), Some(u(8))), v(u(8), 16)],
203             output: void(),
204             definition: Named("llvm.x86.sse2.storeu.dq")
205         },
206         "_subs_epi8" => Intrinsic {
207             inputs: vec![v(i(8), 16), v(i(8), 16)],
208             output: v(i(8), 16),
209             definition: Named("llvm.x86.sse2.psubs.b")
210         },
211         "_subs_epu8" => Intrinsic {
212             inputs: vec![v(u(8), 16), v(u(8), 16)],
213             output: v(u(8), 16),
214             definition: Named("llvm.x86.sse2.psubus.b")
215         },
216         "_subs_epi16" => Intrinsic {
217             inputs: vec![v(i(16), 8), v(i(16), 8)],
218             output: v(i(16), 8),
219             definition: Named("llvm.x86.sse2.psubs.w")
220         },
221         "_subs_epu16" => Intrinsic {
222             inputs: vec![v(u(16), 8), v(u(16), 8)],
223             output: v(u(16), 8),
224             definition: Named("llvm.x86.sse2.psubus.w")
225         },
226         "_addsub_ps" => Intrinsic {
227             inputs: vec![v(f(32), 4), v(f(32), 4)],
228             output: v(f(32), 4),
229             definition: Named("llvm.x86.sse3.addsub.ps")
230         },
231         "_addsub_pd" => Intrinsic {
232             inputs: vec![v(f(64), 2), v(f(64), 2)],
233             output: v(f(64), 2),
234             definition: Named("llvm.x86.sse3.addsub.pd")
235         },
236         "_hadd_ps" => Intrinsic {
237             inputs: vec![v(f(32), 4), v(f(32), 4)],
238             output: v(f(32), 4),
239             definition: Named("llvm.x86.sse3.hadd.ps")
240         },
241         "_hadd_pd" => Intrinsic {
242             inputs: vec![v(f(64), 2), v(f(64), 2)],
243             output: v(f(64), 2),
244             definition: Named("llvm.x86.sse3.hadd.pd")
245         },
246         "_hsub_ps" => Intrinsic {
247             inputs: vec![v(f(32), 4), v(f(32), 4)],
248             output: v(f(32), 4),
249             definition: Named("llvm.x86.sse3.hsub.ps")
250         },
251         "_hsub_pd" => Intrinsic {
252             inputs: vec![v(f(64), 2), v(f(64), 2)],
253             output: v(f(64), 2),
254             definition: Named("llvm.x86.sse3.hsub.pd")
255         },
256         "_lddqu_si128" => Intrinsic {
257             inputs: vec![p(true, v(u(8), 16), Some(i(8)))],
258             output: v(u(8), 16),
259             definition: Named("llvm.x86.sse3.ldu.dq")
260         },
261         "_abs_epi8" => Intrinsic {
262             inputs: vec![v(i(8), 16)],
263             output: v(i(8), 16),
264             definition: Named("llvm.x86.ssse3.pabs.b.128")
265         },
266         "_abs_epi16" => Intrinsic {
267             inputs: vec![v(i(16), 8)],
268             output: v(i(16), 8),
269             definition: Named("llvm.x86.ssse3.pabs.w.128")
270         },
271         "_abs_epi32" => Intrinsic {
272             inputs: vec![v(i(32), 4)],
273             output: v(i(32), 4),
274             definition: Named("llvm.x86.ssse3.pabs.d.128")
275         },
276         "_hadd_epi16" => Intrinsic {
277             inputs: vec![v(i(16), 8), v(i(16), 8)],
278             output: v(i(16), 8),
279             definition: Named("llvm.x86.ssse3.phadd.w.128")
280         },
281         "_hadd_epi32" => Intrinsic {
282             inputs: vec![v(i(32), 4), v(i(32), 4)],
283             output: v(i(32), 4),
284             definition: Named("llvm.x86.ssse3.phadd.d.128")
285         },
286         "_hadds_epi16" => Intrinsic {
287             inputs: vec![v(i(16), 8), v(i(16), 8)],
288             output: v(i(16), 8),
289             definition: Named("llvm.x86.ssse3.phadd.sw.128")
290         },
291         "_hsub_epi16" => Intrinsic {
292             inputs: vec![v(i(16), 8), v(i(16), 8)],
293             output: v(i(16), 8),
294             definition: Named("llvm.x86.ssse3.phsub.w.128")
295         },
296         "_hsub_epi32" => Intrinsic {
297             inputs: vec![v(i(32), 4), v(i(32), 4)],
298             output: v(i(32), 4),
299             definition: Named("llvm.x86.ssse3.phsub.d.128")
300         },
301         "_hsubs_epi16" => Intrinsic {
302             inputs: vec![v(i(16), 8), v(i(16), 8)],
303             output: v(i(16), 8),
304             definition: Named("llvm.x86.ssse3.phsub.sw.128")
305         },
306         "_maddubs_epi16" => Intrinsic {
307             inputs: vec![v(u(8), 16), v(i(8), 16)],
308             output: v(i(16), 8),
309             definition: Named("llvm.x86.ssse3.pmadd.ub.sw.128")
310         },
311         "_mulhrs_epi16" => Intrinsic {
312             inputs: vec![v(i(16), 8), v(i(16), 8)],
313             output: v(i(16), 8),
314             definition: Named("llvm.x86.ssse3.pmul.hr.sw.128")
315         },
316         "_shuffle_epi8" => Intrinsic {
317             inputs: vec![v(i(8), 16), v(i(8), 16)],
318             output: v(i(8), 16),
319             definition: Named("llvm.x86.ssse3.pshuf.b.128")
320         },
321         "_sign_epi8" => Intrinsic {
322             inputs: vec![v(i(8), 16), v(i(8), 16)],
323             output: v(i(8), 16),
324             definition: Named("llvm.x86.ssse3.psign.b.128")
325         },
326         "_sign_epi16" => Intrinsic {
327             inputs: vec![v(i(16), 8), v(i(16), 8)],
328             output: v(i(16), 8),
329             definition: Named("llvm.x86.ssse3.psign.w.128")
330         },
331         "_sign_epi32" => Intrinsic {
332             inputs: vec![v(i(32), 4), v(i(32), 4)],
333             output: v(i(32), 4),
334             definition: Named("llvm.x86.ssse3.psign.d.128")
335         },
336         "_dp_ps" => Intrinsic {
337             inputs: vec![v(f(32), 4), v(f(32), 4), i_(32, 8)],
338             output: v(f(32), 4),
339             definition: Named("llvm.x86.sse41.dpps")
340         },
341         "_dp_pd" => Intrinsic {
342             inputs: vec![v(f(64), 2), v(f(64), 2), i_(32, 8)],
343             output: v(f(64), 2),
344             definition: Named("llvm.x86.sse41.dppd")
345         },
346         "_max_epi8" => Intrinsic {
347             inputs: vec![v(i(8), 16), v(i(8), 16)],
348             output: v(i(8), 16),
349             definition: Named("llvm.x86.sse41.pmaxsb")
350         },
351         "_max_epu16" => Intrinsic {
352             inputs: vec![v(u(16), 8), v(u(16), 8)],
353             output: v(u(16), 8),
354             definition: Named("llvm.x86.sse41.pmaxuw")
355         },
356         "_max_epi32" => Intrinsic {
357             inputs: vec![v(i(32), 4), v(i(32), 4)],
358             output: v(i(32), 4),
359             definition: Named("llvm.x86.sse41.pmaxsd")
360         },
361         "_max_epu32" => Intrinsic {
362             inputs: vec![v(u(32), 4), v(u(32), 4)],
363             output: v(u(32), 4),
364             definition: Named("llvm.x86.sse41.pmaxud")
365         },
366         "_min_epi8" => Intrinsic {
367             inputs: vec![v(i(8), 16), v(i(8), 16)],
368             output: v(i(8), 16),
369             definition: Named("llvm.x86.sse41.pminsb")
370         },
371         "_min_epu16" => Intrinsic {
372             inputs: vec![v(u(16), 8), v(u(16), 8)],
373             output: v(u(16), 8),
374             definition: Named("llvm.x86.sse41.pminuw")
375         },
376         "_min_epi32" => Intrinsic {
377             inputs: vec![v(i(32), 4), v(i(32), 4)],
378             output: v(i(32), 4),
379             definition: Named("llvm.x86.sse41.pminsd")
380         },
381         "_min_epu32" => Intrinsic {
382             inputs: vec![v(u(32), 4), v(u(32), 4)],
383             output: v(u(32), 4),
384             definition: Named("llvm.x86.sse41.pminud")
385         },
386         "_minpos_epu16" => Intrinsic {
387             inputs: vec![v(u(16), 8)],
388             output: v(u(16), 8),
389             definition: Named("llvm.x86.sse41.phminposuw")
390         },
391         "_mpsadbw_epu8" => Intrinsic {
392             inputs: vec![v(u(8), 16), v(u(8), 16), i_(32, 8)],
393             output: v(u(16), 8),
394             definition: Named("llvm.x86.sse41.mpsadbw")
395         },
396         "_mul_epi32" => Intrinsic {
397             inputs: vec![v(i(32), 4), v(i(32), 4)],
398             output: v(i(64), 2),
399             definition: Named("llvm.x86.sse41.pmuldq")
400         },
401         "_packus_epi32" => Intrinsic {
402             inputs: vec![v(i(32), 4), v(i(32), 4)],
403             output: v(u(16), 8),
404             definition: Named("llvm.x86.sse41.packusdw")
405         },
406         "_testc_si128" => Intrinsic {
407             inputs: vec![v(u(64), 2), v(u(64), 2)],
408             output: i(32),
409             definition: Named("llvm.x86.sse41.ptestc")
410         },
411         "_testnzc_si128" => Intrinsic {
412             inputs: vec![v(u(64), 2), v(u(64), 2)],
413             output: i(32),
414             definition: Named("llvm.x86.sse41.ptestnzc")
415         },
416         "_testz_si128" => Intrinsic {
417             inputs: vec![v(u(64), 2), v(u(64), 2)],
418             output: i(32),
419             definition: Named("llvm.x86.sse41.ptestz")
420         },
421         "_cmpestra" => Intrinsic {
422             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
423             output: i(32),
424             definition: Named("llvm.x86.sse42.pcmpestria128")
425         },
426         "_cmpestrc" => Intrinsic {
427             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
428             output: i(32),
429             definition: Named("llvm.x86.sse42.pcmpestric128")
430         },
431         "_cmpestri" => Intrinsic {
432             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
433             output: i(32),
434             definition: Named("llvm.x86.sse42.pcmpestri128")
435         },
436         "_cmpestrm" => Intrinsic {
437             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
438             output: v(i(8), 16),
439             definition: Named("llvm.x86.sse42.pcmpestrm128")
440         },
441         "_cmpestro" => Intrinsic {
442             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
443             output: i(32),
444             definition: Named("llvm.x86.sse42.pcmpestrio128")
445         },
446         "_cmpestrs" => Intrinsic {
447             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
448             output: i(32),
449             definition: Named("llvm.x86.sse42.pcmpestris128")
450         },
451         "_cmpestrz" => Intrinsic {
452             inputs: vec![v(i(8), 16), i(32), v(i(8), 16), i(32), i_(32, 8)],
453             output: i(32),
454             definition: Named("llvm.x86.sse42.pcmpestriz128")
455         },
456         "_cmpistra" => Intrinsic {
457             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
458             output: i(32),
459             definition: Named("llvm.x86.sse42.pcmpistria128")
460         },
461         "_cmpistrc" => Intrinsic {
462             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
463             output: i(32),
464             definition: Named("llvm.x86.sse42.pcmpistric128")
465         },
466         "_cmpistri" => Intrinsic {
467             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
468             output: i(32),
469             definition: Named("llvm.x86.sse42.pcmpistri128")
470         },
471         "_cmpistrm" => Intrinsic {
472             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
473             output: v(i(8), 16),
474             definition: Named("llvm.x86.sse42.pcmpistrm128")
475         },
476         "_cmpistro" => Intrinsic {
477             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
478             output: i(32),
479             definition: Named("llvm.x86.sse42.pcmpistrio128")
480         },
481         "_cmpistrs" => Intrinsic {
482             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
483             output: i(32),
484             definition: Named("llvm.x86.sse42.pcmpistris128")
485         },
486         "_cmpistrz" => Intrinsic {
487             inputs: vec![v(i(8), 16), v(i(8), 16), i_(32, 8)],
488             output: i(32),
489             definition: Named("llvm.x86.sse42.pcmpistriz128")
490         },
491         "256_addsub_ps" => Intrinsic {
492             inputs: vec![v(f(32), 8), v(f(32), 8)],
493             output: v(f(32), 8),
494             definition: Named("llvm.x86.avx.addsub.ps.256")
495         },
496         "256_addsub_pd" => Intrinsic {
497             inputs: vec![v(f(64), 4), v(f(64), 4)],
498             output: v(f(64), 4),
499             definition: Named("llvm.x86.avx.addsub.pd.256")
500         },
501         "256_dp_ps" => Intrinsic {
502             inputs: vec![v(f(32), 8), v(f(32), 8), i_(32, 8)],
503             output: v(f(32), 8),
504             definition: Named("llvm.x86.avx.dp.ps.256")
505         },
506         "256_hadd_ps" => Intrinsic {
507             inputs: vec![v(f(32), 8), v(f(32), 8)],
508             output: v(f(32), 8),
509             definition: Named("llvm.x86.avx.hadd.ps.256")
510         },
511         "256_hadd_pd" => Intrinsic {
512             inputs: vec![v(f(64), 4), v(f(64), 4)],
513             output: v(f(64), 4),
514             definition: Named("llvm.x86.avx.hadd.pd.256")
515         },
516         "256_hsub_ps" => Intrinsic {
517             inputs: vec![v(f(32), 8), v(f(32), 8)],
518             output: v(f(32), 8),
519             definition: Named("llvm.x86.avx.hsub.ps.256")
520         },
521         "256_hsub_pd" => Intrinsic {
522             inputs: vec![v(f(64), 4), v(f(64), 4)],
523             output: v(f(64), 4),
524             definition: Named("llvm.x86.avx.hsub.pd.256")
525         },
526         "256_max_ps" => Intrinsic {
527             inputs: vec![v(f(32), 8), v(f(32), 8)],
528             output: v(f(32), 8),
529             definition: Named("llvm.x86.avx.max.ps.256")
530         },
531         "256_max_pd" => Intrinsic {
532             inputs: vec![v(f(64), 4), v(f(64), 4)],
533             output: v(f(64), 4),
534             definition: Named("llvm.x86.avx.max.pd.256")
535         },
536         "_maskload_ps" => Intrinsic {
537             inputs: vec![p(true, f(32), Some(i(8))), v_(i(32), f(32), 4)],
538             output: v(f(32), 4),
539             definition: Named("llvm.x86.avx.maskload.ps")
540         },
541         "_maskload_pd" => Intrinsic {
542             inputs: vec![p(true, f(64), Some(i(8))), v_(i(64), f(64), 2)],
543             output: v(f(64), 2),
544             definition: Named("llvm.x86.avx.maskload.pd")
545         },
546         "256_maskload_ps" => Intrinsic {
547             inputs: vec![p(true, f(32), Some(i(8))), v_(i(32), f(32), 8)],
548             output: v(f(32), 8),
549             definition: Named("llvm.x86.avx.maskload.ps.256")
550         },
551         "256_maskload_pd" => Intrinsic {
552             inputs: vec![p(true, f(64), Some(i(8))), v_(i(64), f(64), 4)],
553             output: v(f(64), 4),
554             definition: Named("llvm.x86.avx.maskload.pd.256")
555         },
556         "_maskstore_ps" => Intrinsic {
557             inputs: vec![p(false, f(32), Some(i(8))), v_(i(32), f(32), 4), v(f(32), 4)],
558             output: void(),
559             definition: Named("llvm.x86.avx.maskstore.ps")
560         },
561         "_maskstore_pd" => Intrinsic {
562             inputs: vec![p(false, f(64), Some(i(8))), v_(i(64), f(64), 2), v(f(64), 2)],
563             output: void(),
564             definition: Named("llvm.x86.avx.maskstore.pd")
565         },
566         "256_maskstore_ps" => Intrinsic {
567             inputs: vec![p(false, f(32), Some(i(8))), v_(i(32), f(32), 8), v(f(32), 8)],
568             output: void(),
569             definition: Named("llvm.x86.avx.maskstore.ps.256")
570         },
571         "256_maskstore_pd" => Intrinsic {
572             inputs: vec![p(false, f(64), Some(i(8))), v_(i(64), f(64), 4), v(f(64), 4)],
573             output: void(),
574             definition: Named("llvm.x86.avx.maskstore.pd.256")
575         },
576         "256_min_ps" => Intrinsic {
577             inputs: vec![v(f(32), 8), v(f(32), 8)],
578             output: v(f(32), 8),
579             definition: Named("llvm.x86.avx.min.ps.256")
580         },
581         "256_min_pd" => Intrinsic {
582             inputs: vec![v(f(64), 4), v(f(64), 4)],
583             output: v(f(64), 4),
584             definition: Named("llvm.x86.avx.min.pd.256")
585         },
586         "256_movemask_ps" => Intrinsic {
587             inputs: vec![v(f(32), 8)],
588             output: i(32),
589             definition: Named("llvm.x86.avx.movmsk.ps.256")
590         },
591         "256_movemask_pd" => Intrinsic {
592             inputs: vec![v(f(64), 4)],
593             output: i(32),
594             definition: Named("llvm.x86.avx.movmsk.pd.256")
595         },
596         "_permutevar_ps" => Intrinsic {
597             inputs: vec![v(f(32), 4), v(i(32), 4)],
598             output: v(f(32), 4),
599             definition: Named("llvm.x86.avx.vpermilvar.ps")
600         },
601         "_permutevar_pd" => Intrinsic {
602             inputs: vec![v(f(64), 2), v(i(64), 2)],
603             output: v(f(64), 2),
604             definition: Named("llvm.x86.avx.vpermilvar.pd")
605         },
606         "256_permutevar_ps" => Intrinsic {
607             inputs: vec![v(f(32), 8), v(i(32), 8)],
608             output: v(f(32), 8),
609             definition: Named("llvm.x86.avx.vpermilvar.ps.256")
610         },
611         "256_permutevar_pd" => Intrinsic {
612             inputs: vec![v(f(64), 4), v(i(64), 4)],
613             output: v(f(64), 4),
614             definition: Named("llvm.x86.avx.vpermilvar.pd.256")
615         },
616         "256_rcp_ps" => Intrinsic {
617             inputs: vec![v(f(32), 8)],
618             output: v(f(32), 8),
619             definition: Named("llvm.x86.avx.rcp.ps.256")
620         },
621         "256_rsqrt_ps" => Intrinsic {
622             inputs: vec![v(f(32), 8)],
623             output: v(f(32), 8),
624             definition: Named("llvm.x86.avx.rsqrt.ps.256")
625         },
626         "256_storeu_ps" => Intrinsic {
627             inputs: vec![p(false, v(f(32), 8), Some(u(8))), v(f(32), 8)],
628             output: void(),
629             definition: Named("llvm.x86.avx.storeu.ps.256")
630         },
631         "256_storeu_pd" => Intrinsic {
632             inputs: vec![p(false, v(f(64), 4), Some(u(8))), v(f(64), 4)],
633             output: void(),
634             definition: Named("llvm.x86.avx.storeu.ps.256")
635         },
636         "256_storeu_si256" => Intrinsic {
637             inputs: vec![p(false, v(u(8), 32), Some(u(8))), v(u(8), 32)],
638             output: void(),
639             definition: Named("llvm.x86.avx.storeu.dq.256")
640         },
641         "256_sqrt_ps" => Intrinsic {
642             inputs: vec![v(f(32), 8)],
643             output: v(f(32), 8),
644             definition: Named("llvm.sqrt.v8f32")
645         },
646         "256_sqrt_pd" => Intrinsic {
647             inputs: vec![v(f(64), 4)],
648             output: v(f(64), 4),
649             definition: Named("llvm.sqrt.v4f64")
650         },
651         "_testc_ps" => Intrinsic {
652             inputs: vec![v(f(32), 4), v(f(32), 4)],
653             output: i(32),
654             definition: Named("llvm.x86.avx.vtestc.ps")
655         },
656         "256_testc_ps" => Intrinsic {
657             inputs: vec![v(f(32), 8), v(f(32), 8)],
658             output: i(32),
659             definition: Named("llvm.x86.avx.vtestc.ps.256")
660         },
661         "_testc_pd" => Intrinsic {
662             inputs: vec![v(f(64), 2), v(f(64), 2)],
663             output: i(32),
664             definition: Named("llvm.x86.avx.vtestc.pd")
665         },
666         "256_testc_pd" => Intrinsic {
667             inputs: vec![v(f(64), 4), v(f(64), 4)],
668             output: i(32),
669             definition: Named("llvm.x86.avx.vtestc.pd.256")
670         },
671         "256_testc_si256" => Intrinsic {
672             inputs: vec![v(u(64), 4), v(u(64), 4)],
673             output: i(32),
674             definition: Named("llvm.x86.avx.ptestc.256")
675         },
676         "_testnzc_ps" => Intrinsic {
677             inputs: vec![v(f(32), 4), v(f(32), 4)],
678             output: i(32),
679             definition: Named("llvm.x86.avx.vtestnzc.ps")
680         },
681         "256_testnzc_ps" => Intrinsic {
682             inputs: vec![v(f(32), 8), v(f(32), 8)],
683             output: i(32),
684             definition: Named("llvm.x86.avx.vtestnzc.ps.256")
685         },
686         "_testnzc_pd" => Intrinsic {
687             inputs: vec![v(f(64), 2), v(f(64), 2)],
688             output: i(32),
689             definition: Named("llvm.x86.avx.vtestnzc.pd")
690         },
691         "256_testnzc_pd" => Intrinsic {
692             inputs: vec![v(f(64), 4), v(f(64), 4)],
693             output: i(32),
694             definition: Named("llvm.x86.avx.vtestnzc.pd.256")
695         },
696         "256_testnzc_si256" => Intrinsic {
697             inputs: vec![v(u(64), 4), v(u(64), 4)],
698             output: i(32),
699             definition: Named("llvm.x86.avx.ptestnzc.256")
700         },
701         "_testz_ps" => Intrinsic {
702             inputs: vec![v(f(32), 4), v(f(32), 4)],
703             output: i(32),
704             definition: Named("llvm.x86.avx.vtestz.ps")
705         },
706         "256_testz_ps" => Intrinsic {
707             inputs: vec![v(f(32), 8), v(f(32), 8)],
708             output: i(32),
709             definition: Named("llvm.x86.avx.vtestz.ps.256")
710         },
711         "_testz_pd" => Intrinsic {
712             inputs: vec![v(f(64), 2), v(f(64), 2)],
713             output: i(32),
714             definition: Named("llvm.x86.avx.vtestz.pd")
715         },
716         "256_testz_pd" => Intrinsic {
717             inputs: vec![v(f(64), 4), v(f(64), 4)],
718             output: i(32),
719             definition: Named("llvm.x86.avx.vtestz.pd.256")
720         },
721         "256_testz_si256" => Intrinsic {
722             inputs: vec![v(u(64), 4), v(u(64), 4)],
723             output: i(32),
724             definition: Named("llvm.x86.avx.ptestz.256")
725         },
726         "256_zeroall" => Intrinsic {
727             inputs: vec![],
728             output: void(),
729             definition: Named("llvm.x86.avx.vzeroall")
730         },
731         "256_zeroupper" => Intrinsic {
732             inputs: vec![],
733             output: void(),
734             definition: Named("llvm.x86.avx.vzeroupper")
735         },
736         "256_abs_epi8" => Intrinsic {
737             inputs: vec![v(i(8), 32)],
738             output: v(i(8), 32),
739             definition: Named("llvm.x86.avx2.pabs.b")
740         },
741         "256_abs_epi16" => Intrinsic {
742             inputs: vec![v(i(16), 16)],
743             output: v(i(16), 16),
744             definition: Named("llvm.x86.avx2.pabs.w")
745         },
746         "256_abs_epi32" => Intrinsic {
747             inputs: vec![v(i(32), 8)],
748             output: v(i(32), 8),
749             definition: Named("llvm.x86.avx2.pabs.d")
750         },
751         "256_adds_epi8" => Intrinsic {
752             inputs: vec![v(i(8), 32), v(i(8), 32)],
753             output: v(i(8), 32),
754             definition: Named("llvm.x86.avx2.padds.b")
755         },
756         "256_adds_epu8" => Intrinsic {
757             inputs: vec![v(u(8), 32), v(u(8), 32)],
758             output: v(u(8), 32),
759             definition: Named("llvm.x86.avx2.paddus.b")
760         },
761         "256_adds_epi16" => Intrinsic {
762             inputs: vec![v(i(16), 16), v(i(16), 16)],
763             output: v(i(16), 16),
764             definition: Named("llvm.x86.avx2.padds.w")
765         },
766         "256_adds_epu16" => Intrinsic {
767             inputs: vec![v(u(16), 16), v(u(16), 16)],
768             output: v(u(16), 16),
769             definition: Named("llvm.x86.avx2.paddus.w")
770         },
771         "256_avg_epu8" => Intrinsic {
772             inputs: vec![v(u(8), 32), v(u(8), 32)],
773             output: v(u(8), 32),
774             definition: Named("llvm.x86.avx2.pavg.b")
775         },
776         "256_avg_epu16" => Intrinsic {
777             inputs: vec![v(u(16), 16), v(u(16), 16)],
778             output: v(u(16), 16),
779             definition: Named("llvm.x86.avx2.pavg.w")
780         },
781         "256_hadd_epi16" => Intrinsic {
782             inputs: vec![v(i(16), 16), v(i(16), 16)],
783             output: v(i(16), 16),
784             definition: Named("llvm.x86.avx2.phadd.w")
785         },
786         "256_hadd_epi32" => Intrinsic {
787             inputs: vec![v(i(32), 8), v(i(32), 8)],
788             output: v(i(32), 8),
789             definition: Named("llvm.x86.avx2.phadd.d")
790         },
791         "256_hadds_epi16" => Intrinsic {
792             inputs: vec![v(i(16), 16), v(i(16), 16)],
793             output: v(i(16), 16),
794             definition: Named("llvm.x86.avx2.phadd.sw")
795         },
796         "256_hsub_epi16" => Intrinsic {
797             inputs: vec![v(i(16), 16), v(i(16), 16)],
798             output: v(i(16), 16),
799             definition: Named("llvm.x86.avx2.phsub.w")
800         },
801         "256_hsub_epi32" => Intrinsic {
802             inputs: vec![v(i(32), 8), v(i(32), 8)],
803             output: v(i(32), 8),
804             definition: Named("llvm.x86.avx2.phsub.d")
805         },
806         "256_hsubs_epi16" => Intrinsic {
807             inputs: vec![v(i(16), 16), v(i(16), 16)],
808             output: v(i(16), 16),
809             definition: Named("llvm.x86.avx2.phsub.sw")
810         },
811         "256_madd_epi16" => Intrinsic {
812             inputs: vec![v(i(16), 16), v(i(16), 16)],
813             output: v(i(32), 8),
814             definition: Named("llvm.x86.avx2.pmadd.wd")
815         },
816         "256_maddubs_epi16" => Intrinsic {
817             inputs: vec![v(i(8), 32), v(i(8), 32)],
818             output: v(i(16), 16),
819             definition: Named("llvm.x86.avx2.pmadd.ub.sw")
820         },
821         "_mask_i32gather_epi32" => Intrinsic {
822             inputs: vec![v(i(32), 4), p(true, i(32), Some(i(8))), v(i(32), 4), v(i(32), 4), i_(32, 8)],
823             output: v(i(32), 4),
824             definition: Named("llvm.x86.avx2.gather.d.d")
825         },
826         "_mask_i32gather_ps" => Intrinsic {
827             inputs: vec![v(f(32), 4), p(true, f(32), Some(i(8))), v(i(32), 4), v_(i(32), f(32), 4), i_(32, 8)],
828             output: v(f(32), 4),
829             definition: Named("llvm.x86.avx2.gather.d.ps")
830         },
831         "256_mask_i32gather_epi32" => Intrinsic {
832             inputs: vec![v(i(32), 8), p(true, i(32), Some(i(8))), v(i(32), 8), v(i(32), 8), i_(32, 8)],
833             output: v(i(32), 8),
834             definition: Named("llvm.x86.avx2.gather.d.d.256")
835         },
836         "256_mask_i32gather_ps" => Intrinsic {
837             inputs: vec![v(f(32), 8), p(true, f(32), Some(i(8))), v(i(32), 8), v_(i(32), f(32), 8), i_(32, 8)],
838             output: v(f(32), 8),
839             definition: Named("llvm.x86.avx2.gather.d.ps.256")
840         },
841         "_mask_i32gather_epi64" => Intrinsic {
842             inputs: vec![v(i(64), 2), p(true, i(64), Some(i(8))), v(i(32), 4), v(i(64), 2), i_(32, 8)],
843             output: v(i(64), 2),
844             definition: Named("llvm.x86.avx2.gather.d.q")
845         },
846         "_mask_i32gather_pd" => Intrinsic {
847             inputs: vec![v(f(64), 2), p(true, f(64), Some(i(8))), v(i(32), 4), v_(i(64), f(64), 2), i_(32, 8)],
848             output: v(f(64), 2),
849             definition: Named("llvm.x86.avx2.gather.d.pd")
850         },
851         "256_mask_i32gather_epi64" => Intrinsic {
852             inputs: vec![v(i(64), 4), p(true, i(64), Some(i(8))), v(i(32), 4), v(i(64), 4), i_(32, 8)],
853             output: v(i(64), 4),
854             definition: Named("llvm.x86.avx2.gather.d.q.256")
855         },
856         "256_mask_i32gather_pd" => Intrinsic {
857             inputs: vec![v(f(64), 4), p(true, f(64), Some(i(8))), v(i(32), 4), v_(i(64), f(64), 4), i_(32, 8)],
858             output: v(f(64), 4),
859             definition: Named("llvm.x86.avx2.gather.d.pd.256")
860         },
861         "_mask_i64gather_epi32" => Intrinsic {
862             inputs: vec![v(i(32), 4), p(true, i(32), Some(i(8))), v(i(64), 2), v(i(32), 4), i_(32, 8)],
863             output: v(i(32), 4),
864             definition: Named("llvm.x86.avx2.gather.q.d")
865         },
866         "_mask_i64gather_ps" => Intrinsic {
867             inputs: vec![v(f(32), 4), p(true, f(32), Some(i(8))), v(i(64), 2), v_(i(32), f(32), 4), i_(32, 8)],
868             output: v(f(32), 4),
869             definition: Named("llvm.x86.avx2.gather.q.ps")
870         },
871         "256_mask_i64gather_epi32" => Intrinsic {
872             inputs: vec![v(i(32), 4), p(true, i(32), Some(i(8))), v(i(64), 4), v(i(32), 4), i_(32, 8)],
873             output: v(i(32), 4),
874             definition: Named("llvm.x86.avx2.gather.q.d")
875         },
876         "256_mask_i64gather_ps" => Intrinsic {
877             inputs: vec![v(f(32), 4), p(true, f(32), Some(i(8))), v(i(64), 4), v_(i(32), f(32), 4), i_(32, 8)],
878             output: v(f(32), 4),
879             definition: Named("llvm.x86.avx2.gather.q.ps")
880         },
881         "_mask_i64gather_epi64" => Intrinsic {
882             inputs: vec![v(i(64), 2), p(true, i(64), Some(i(8))), v(i(64), 2), v(i(64), 2), i_(32, 8)],
883             output: v(i(64), 2),
884             definition: Named("llvm.x86.avx2.gather.q.q")
885         },
886         "_mask_i64gather_pd" => Intrinsic {
887             inputs: vec![v(f(64), 2), p(true, f(64), Some(i(8))), v(i(64), 2), v_(i(64), f(64), 2), i_(32, 8)],
888             output: v(f(64), 2),
889             definition: Named("llvm.x86.avx2.gather.q.pd")
890         },
891         "256_mask_i64gather_epi64" => Intrinsic {
892             inputs: vec![v(i(64), 4), p(true, i(64), Some(i(8))), v(i(64), 4), v(i(64), 4), i_(32, 8)],
893             output: v(i(64), 4),
894             definition: Named("llvm.x86.avx2.gather.q.q.256")
895         },
896         "256_mask_i64gather_pd" => Intrinsic {
897             inputs: vec![v(f(64), 4), p(true, f(64), Some(i(8))), v(i(64), 4), v_(i(64), f(64), 4), i_(32, 8)],
898             output: v(f(64), 4),
899             definition: Named("llvm.x86.avx2.gather.q.pd.256")
900         },
901         "_maskload_epi32" => Intrinsic {
902             inputs: vec![p(true, v(i(32), 4), Some(i(8))), v(i(32), 4)],
903             output: v(i(32), 4),
904             definition: Named("llvm.x86.avx2.maskload.d")
905         },
906         "_maskload_epi64" => Intrinsic {
907             inputs: vec![p(true, v(i(64), 2), Some(i(8))), v(i(64), 2)],
908             output: v(i(64), 2),
909             definition: Named("llvm.x86.avx2.maskload.q")
910         },
911         "256_maskload_epi32" => Intrinsic {
912             inputs: vec![p(true, v(i(32), 8), Some(i(8))), v(i(32), 8)],
913             output: v(i(32), 8),
914             definition: Named("llvm.x86.avx2.maskload.d.256")
915         },
916         "256_maskload_epi64" => Intrinsic {
917             inputs: vec![p(true, v(i(64), 4), Some(i(8))), v(i(64), 4)],
918             output: v(i(64), 4),
919             definition: Named("llvm.x86.avx2.maskload.q.256")
920         },
921         "_maskstore_epi32" => Intrinsic {
922             inputs: vec![p(false, i(32), Some(i(8))), v(i(32), 4), v(i(32), 4)],
923             output: void(),
924             definition: Named("llvm.x86.avx2.maskstore.d")
925         },
926         "_maskstore_epi64" => Intrinsic {
927             inputs: vec![p(false, i(64), Some(i(8))), v(i(64), 2), v(i(64), 2)],
928             output: void(),
929             definition: Named("llvm.x86.avx2.maskstore.q")
930         },
931         "256_maskstore_epi32" => Intrinsic {
932             inputs: vec![p(false, i(32), Some(i(8))), v(i(32), 8), v(i(32), 8)],
933             output: void(),
934             definition: Named("llvm.x86.avx2.maskstore.d.256")
935         },
936         "256_maskstore_epi64" => Intrinsic {
937             inputs: vec![p(false, i(64), Some(i(8))), v(i(64), 4), v(i(64), 4)],
938             output: void(),
939             definition: Named("llvm.x86.avx2.maskstore.q.256")
940         },
941         "256_max_epi8" => Intrinsic {
942             inputs: vec![v(i(8), 32), v(i(8), 32)],
943             output: v(i(8), 32),
944             definition: Named("llvm.x86.avx2.pmaxs.b")
945         },
946         "256_max_epu8" => Intrinsic {
947             inputs: vec![v(u(8), 32), v(u(8), 32)],
948             output: v(u(8), 32),
949             definition: Named("llvm.x86.avx2.pmaxu.b")
950         },
951         "256_max_epi16" => Intrinsic {
952             inputs: vec![v(i(16), 16), v(i(16), 16)],
953             output: v(i(16), 16),
954             definition: Named("llvm.x86.avx2.pmaxs.w")
955         },
956         "256_max_epu16" => Intrinsic {
957             inputs: vec![v(u(16), 16), v(u(16), 16)],
958             output: v(u(16), 16),
959             definition: Named("llvm.x86.avx2.pmaxu.w")
960         },
961         "256_max_epi32" => Intrinsic {
962             inputs: vec![v(i(32), 8), v(i(32), 8)],
963             output: v(i(32), 8),
964             definition: Named("llvm.x86.avx2.pmaxs.d")
965         },
966         "256_max_epu32" => Intrinsic {
967             inputs: vec![v(u(32), 8), v(u(32), 8)],
968             output: v(u(32), 8),
969             definition: Named("llvm.x86.avx2.pmaxu.d")
970         },
971         "256_min_epi8" => Intrinsic {
972             inputs: vec![v(i(8), 32), v(i(8), 32)],
973             output: v(i(8), 32),
974             definition: Named("llvm.x86.avx2.pmins.b")
975         },
976         "256_min_epu8" => Intrinsic {
977             inputs: vec![v(u(8), 32), v(u(8), 32)],
978             output: v(u(8), 32),
979             definition: Named("llvm.x86.avx2.pminu.b")
980         },
981         "256_min_epi16" => Intrinsic {
982             inputs: vec![v(i(16), 16), v(i(16), 16)],
983             output: v(i(16), 16),
984             definition: Named("llvm.x86.avx2.pmins.w")
985         },
986         "256_min_epu16" => Intrinsic {
987             inputs: vec![v(u(16), 16), v(u(16), 16)],
988             output: v(u(16), 16),
989             definition: Named("llvm.x86.avx2.pminu.w")
990         },
991         "256_min_epi32" => Intrinsic {
992             inputs: vec![v(i(32), 8), v(i(32), 8)],
993             output: v(i(32), 8),
994             definition: Named("llvm.x86.avx2.pmins.d")
995         },
996         "256_min_epu32" => Intrinsic {
997             inputs: vec![v(u(32), 8), v(u(32), 8)],
998             output: v(u(32), 8),
999             definition: Named("llvm.x86.avx2.pminu.d")
1000         },
1001         "256_movemask_epi8" => Intrinsic {
1002             inputs: vec![v(i(8), 32)],
1003             output: i(32),
1004             definition: Named("llvm.x86.avx2.pmovmskb")
1005         },
1006         "256_mpsadbw_epu8" => Intrinsic {
1007             inputs: vec![v(u(8), 32), v(u(8), 32), i_(32, 8)],
1008             output: v(u(16), 16),
1009             definition: Named("llvm.x86.avx2.mpsadbw")
1010         },
1011         "256_mul_epi64" => Intrinsic {
1012             inputs: vec![v(i(32), 8), v(i(32), 8)],
1013             output: v(i(64), 4),
1014             definition: Named("llvm.x86.avx2.pmulq.dq")
1015         },
1016         "256_mul_epu64" => Intrinsic {
1017             inputs: vec![v(u(32), 8), v(u(32), 8)],
1018             output: v(u(64), 4),
1019             definition: Named("llvm.x86.avx2.pmulq.dq")
1020         },
1021         "256_mulhi_epi16" => Intrinsic {
1022             inputs: vec![v(i(16), 16), v(i(16), 16)],
1023             output: v(i(16), 16),
1024             definition: Named("llvm.x86.avx2.pmulhw.w")
1025         },
1026         "256_mulhi_epu16" => Intrinsic {
1027             inputs: vec![v(u(16), 16), v(u(16), 16)],
1028             output: v(u(16), 16),
1029             definition: Named("llvm.x86.avx2.pmulhw.w")
1030         },
1031         "256_mulhrs_epi16" => Intrinsic {
1032             inputs: vec![v(i(16), 16), v(i(16), 16)],
1033             output: v(i(16), 16),
1034             definition: Named("llvm.x86.avx2.pmul.hr.sw")
1035         },
1036         "256_packs_epi16" => Intrinsic {
1037             inputs: vec![v(i(16), 16), v(i(16), 16)],
1038             output: v(i(8), 32),
1039             definition: Named("llvm.x86.avx2.packsswb")
1040         },
1041         "256_packus_epi16" => Intrinsic {
1042             inputs: vec![v(i(16), 16), v(i(16), 16)],
1043             output: v(u(8), 32),
1044             definition: Named("llvm.x86.avx2.packuswb")
1045         },
1046         "256_packs_epi32" => Intrinsic {
1047             inputs: vec![v(i(32), 8), v(i(32), 8)],
1048             output: v(i(16), 16),
1049             definition: Named("llvm.x86.avx2.packssdw")
1050         },
1051         "256_packus_epi32" => Intrinsic {
1052             inputs: vec![v(i(32), 8), v(i(32), 8)],
1053             output: v(u(16), 16),
1054             definition: Named("llvm.x86.avx2.packusdw")
1055         },
1056         "256_permutevar8x32_epi32" => Intrinsic {
1057             inputs: vec![v(i(32), 8), v(i(32), 8)],
1058             output: v(i(32), 8),
1059             definition: Named("llvm.x86.avx2.permd")
1060         },
1061         "256_permutevar8x32_ps" => Intrinsic {
1062             inputs: vec![v(f(32), 8), v(i(32), 8)],
1063             output: v(f(32), 8),
1064             definition: Named("llvm.x86.avx2.permps")
1065         },
1066         "256_sad_epu8" => Intrinsic {
1067             inputs: vec![v(u(8), 32), v(u(8), 32)],
1068             output: v(u(8), 32),
1069             definition: Named("llvm.x86.avx2.psad.bw")
1070         },
1071         "256_shuffle_epi8" => Intrinsic {
1072             inputs: vec![v(i(8), 32), v(i(8), 32)],
1073             output: v(i(8), 32),
1074             definition: Named("llvm.x86.avx2.pshuf.b")
1075         },
1076         "256_sign_epi8" => Intrinsic {
1077             inputs: vec![v(i(8), 32), v(i(8), 32)],
1078             output: v(i(8), 32),
1079             definition: Named("llvm.x86.avx2.psign.b")
1080         },
1081         "256_sign_epi16" => Intrinsic {
1082             inputs: vec![v(i(16), 16), v(i(16), 16)],
1083             output: v(i(16), 16),
1084             definition: Named("llvm.x86.avx2.psign.w")
1085         },
1086         "256_sign_epi32" => Intrinsic {
1087             inputs: vec![v(i(32), 8), v(i(32), 8)],
1088             output: v(i(32), 8),
1089             definition: Named("llvm.x86.avx2.psign.d")
1090         },
1091         "256_subs_epi8" => Intrinsic {
1092             inputs: vec![v(i(8), 32), v(i(8), 32)],
1093             output: v(i(8), 32),
1094             definition: Named("llvm.x86.avx2.psubs.b")
1095         },
1096         "256_subs_epu8" => Intrinsic {
1097             inputs: vec![v(u(8), 32), v(u(8), 32)],
1098             output: v(u(8), 32),
1099             definition: Named("llvm.x86.avx2.psubus.b")
1100         },
1101         "256_subs_epi16" => Intrinsic {
1102             inputs: vec![v(i(16), 16), v(i(16), 16)],
1103             output: v(i(16), 16),
1104             definition: Named("llvm.x86.avx2.psubs.w")
1105         },
1106         "256_subs_epu16" => Intrinsic {
1107             inputs: vec![v(u(16), 16), v(u(16), 16)],
1108             output: v(u(16), 16),
1109             definition: Named("llvm.x86.avx2.psubus.w")
1110         },
1111         _ => return None,
1112     })
1113 }