Skip to content

Commit 0237d95

Browse files
authored
Merge pull request #151 from GuillaumeGomez/x86-intrinsics
Add intrinsic translation for x86 arch
2 parents f537564 + 3970825 commit 0237d95

File tree

2 files changed

+777
-128
lines changed

2 files changed

+777
-128
lines changed

src/intrinsic/llvm.rs

+7-128
Original file line numberDiff line numberDiff line change
@@ -3,134 +3,13 @@ use gccjit::Function;
33
use crate::context::CodegenCx;
44

55
pub fn intrinsic<'gcc, 'tcx>(name: &str, cx: &CodegenCx<'gcc, 'tcx>) -> Function<'gcc> {
6-
let gcc_name =
7-
match name {
8-
"llvm.x86.xgetbv" => "__builtin_ia32_xgetbv",
9-
// NOTE: this doc specifies the equivalent GCC builtins: http://huonw.github.io/llvmint/llvmint/x86/index.html
10-
"llvm.x86.sse2.pmovmskb.128" => "__builtin_ia32_pmovmskb128",
11-
"llvm.x86.avx2.pmovmskb" => "__builtin_ia32_pmovmskb256",
12-
"llvm.x86.sse2.cmp.pd" => "__builtin_ia32_cmppd",
13-
"llvm.x86.sse2.movmsk.pd" => "__builtin_ia32_movmskpd",
14-
"llvm.x86.ssse3.pshuf.b.128" => "__builtin_ia32_pshufb128",
15-
"llvm.x86.sse2.pause" => "__builtin_ia32_pause",
16-
"llvm.x86.avx2.pshuf.b" => "__builtin_ia32_pshufb256",
17-
"llvm.x86.avx2.pslli.d" => "__builtin_ia32_pslldi256",
18-
"llvm.x86.avx2.psrli.d" => "__builtin_ia32_psrldi256",
19-
"llvm.x86.sse2.pslli.q" => "__builtin_ia32_psllqi128",
20-
"llvm.x86.avx.vzeroupper" => "__builtin_ia32_vzeroupper",
21-
"llvm.x86.avx2.vperm2i128" => "__builtin_ia32_permti256",
22-
"llvm.x86.avx2.psrli.w" => "__builtin_ia32_psrlwi256",
23-
"llvm.x86.sse2.storeu.dq" => "__builtin_ia32_storedqu",
24-
"llvm.x86.sse2.psrli.w" => "__builtin_ia32_psrlwi128",
25-
"llvm.x86.avx2.pabs.d" => "__builtin_ia32_pabsd256",
26-
"llvm.x86.sse2.psrli.q" => "__builtin_ia32_psrlqi128",
27-
"llvm.x86.avx2.pabs.w" => "__builtin_ia32_pabsw256",
28-
"llvm.x86.avx2.pblendvb" => "__builtin_ia32_pblendvb256",
29-
"llvm.x86.avx2.pabs.b" => "__builtin_ia32_pabsb256",
30-
"llvm.x86.avx2.psrli.q" => "__builtin_ia32_psrlqi256",
31-
"llvm.x86.sse41.pblendvb" => "__builtin_ia32_pblendvb128",
32-
"llvm.x86.sse41.pblendw" => "__builtin_ia32_pblendw128",
33-
"llvm.x86.sse42.crc32.32.8" => "__builtin_ia32_crc32qi",
34-
"llvm.x86.sse42.crc32.32.16" => "__builtin_ia32_crc32hi",
35-
"llvm.x86.sse42.crc32.32.32" => "__builtin_ia32_crc32si",
36-
"llvm.x86.sse42.crc32.64.64" => "__builtin_ia32_crc32di",
37-
"llvm.x86.avx2.pavg.w" => "__builtin_ia32_pavgw256",
38-
"llvm.x86.avx2.pavg.b" => "__builtin_ia32_pavgb256",
39-
"llvm.x86.avx2.phadd.w" => "__builtin_ia32_phaddw256",
40-
"llvm.x86.avx2.phadd.d" => "__builtin_ia32_phaddd256",
41-
"llvm.x86.avx2.phadd.sw" => "__builtin_ia32_phaddsw256",
42-
"llvm.x86.avx2.phsub.w" => "__builtin_ia32_phsubw256",
43-
"llvm.x86.avx2.phsub.d" => "__builtin_ia32_phsubd256",
44-
"llvm.x86.avx2.phsub.sw" => "__builtin_ia32_phsubsw256",
45-
"llvm.x86.avx2.gather.d.d" => "__builtin_ia32_gatherd_d",
46-
"llvm.x86.avx2.gather.d.d.256" => "__builtin_ia32_gatherd_d256",
47-
"llvm.x86.avx2.gather.d.ps" => "__builtin_ia32_gatherd_ps",
48-
"llvm.x86.avx2.gather.d.ps.256" => "__builtin_ia32_gatherd_ps256",
49-
"llvm.x86.avx2.gather.d.q" => "__builtin_ia32_gatherd_q",
50-
"llvm.x86.avx2.gather.d.q.256" => "__builtin_ia32_gatherd_q256",
51-
"llvm.x86.avx2.gather.d.pd" => "__builtin_ia32_gatherd_pd",
52-
"llvm.x86.avx2.gather.d.pd.256" => "__builtin_ia32_gatherd_pd256",
53-
"llvm.x86.avx2.gather.q.d" => "__builtin_ia32_gatherq_d",
54-
"llvm.x86.avx2.gather.q.d.256" => "__builtin_ia32_gatherq_d256",
55-
"llvm.x86.avx2.gather.q.ps" => "__builtin_ia32_gatherq_ps",
56-
"llvm.x86.avx2.gather.q.ps.256" => "__builtin_ia32_gatherq_ps256",
57-
"llvm.x86.avx2.gather.q.q" => "__builtin_ia32_gatherq_q",
58-
"llvm.x86.avx2.gather.q.q.256" => "__builtin_ia32_gatherq_q256",
59-
"llvm.x86.avx2.gather.q.pd" => "__builtin_ia32_gatherq_pd",
60-
"llvm.x86.avx2.gather.q.pd.256" => "__builtin_ia32_gatherq_pd256",
61-
"llvm.x86.avx2.pmadd.wd" => "__builtin_ia32_pmaddwd256",
62-
"llvm.x86.avx2.pmadd.ub.sw" => "__builtin_ia32_pmaddubsw256",
63-
"llvm.x86.avx2.maskload.d" => "__builtin_ia32_maskloadd",
64-
"llvm.x86.avx2.maskload.d.256" => "__builtin_ia32_maskloadd256",
65-
"llvm.x86.avx2.maskload.q" => "__builtin_ia32_maskloadq",
66-
"llvm.x86.avx2.maskload.q.256" => "__builtin_ia32_maskloadq256",
67-
"llvm.x86.avx2.maskstore.d" => "__builtin_ia32_maskstored",
68-
"llvm.x86.avx2.maskstore.d.256" => "__builtin_ia32_maskstored256",
69-
"llvm.x86.avx2.maskstore.q" => "__builtin_ia32_maskstoreq",
70-
"llvm.x86.avx2.maskstore.q.256" => "__builtin_ia32_maskstoreq256",
71-
"llvm.x86.avx2.pmaxs.w" => "__builtin_ia32_pmaxsw256",
72-
"llvm.x86.avx2.pmaxs.d" => "__builtin_ia32_pmaxsd256",
73-
"llvm.x86.avx2.pmaxs.b" => "__builtin_ia32_pmaxsb256",
74-
"llvm.x86.avx2.pmaxu.w" => "__builtin_ia32_pmaxuw256",
75-
"llvm.x86.avx2.pmaxu.d" => "__builtin_ia32_pmaxud256",
76-
"llvm.x86.avx2.pmaxu.b" => "__builtin_ia32_pmaxub256",
77-
"llvm.x86.avx2.pmins.w" => "__builtin_ia32_pminsw256",
78-
"llvm.x86.avx2.pmins.d" => "__builtin_ia32_pminsd256",
79-
"llvm.x86.avx2.pmins.b" => "__builtin_ia32_pminsb256",
80-
"llvm.x86.avx2.pminu.w" => "__builtin_ia32_pminuw256",
81-
"llvm.x86.avx2.pminu.d" => "__builtin_ia32_pminud256",
82-
"llvm.x86.avx2.pminu.b" => "__builtin_ia32_pminub256",
83-
"llvm.x86.avx2.mpsadbw" => "__builtin_ia32_mpsadbw256",
84-
"llvm.x86.avx2.pmul.dq" => "__builtin_ia32_pmuldq256",
85-
"llvm.x86.avx2.pmulu.dq" => "__builtin_ia32_pmuludq256",
86-
"llvm.x86.avx2.pmulh.w" => "__builtin_ia32_pmulhw256",
87-
"llvm.x86.avx2.pmulhu.w" => "__builtin_ia32_pmulhuw256",
88-
"llvm.x86.avx2.pmul.hr.sw" => "__builtin_ia32_pmulhrsw256",
89-
"llvm.x86.avx2.packsswb" => "__builtin_ia32_packsswb256",
90-
"llvm.x86.avx2.packssdw" => "__builtin_ia32_packssdw256",
91-
"llvm.x86.avx2.packuswb" => "__builtin_ia32_packuswb256",
92-
"llvm.x86.avx2.packusdw" => "__builtin_ia32_packusdw256",
93-
"llvm.x86.avx2.permd" => "__builtin_ia32_permvarsi256",
94-
"llvm.x86.avx2.permps" => "__builtin_ia32_permvarsf256",
95-
"llvm.x86.avx2.psad.bw" => "__builtin_ia32_psadbw256",
96-
"llvm.x86.avx2.psign.w" => "__builtin_ia32_psignw256",
97-
"llvm.x86.avx2.psign.d" => "__builtin_ia32_psignd256",
98-
"llvm.x86.avx2.psign.b" => "__builtin_ia32_psignb256",
99-
"llvm.x86.avx2.psll.w" => "__builtin_ia32_psllw256",
100-
"llvm.x86.avx2.psll.d" => "__builtin_ia32_pslld256",
101-
"llvm.x86.avx2.psll.q" => "__builtin_ia32_psllq256",
102-
"llvm.x86.avx2.pslli.w" => "__builtin_ia32_psllwi256",
103-
"llvm.x86.avx2.pslli.q" => "__builtin_ia32_psllqi256",
104-
"llvm.x86.avx2.psllv.d" => "__builtin_ia32_psllv4si",
105-
"llvm.x86.avx2.psllv.d.256" => "__builtin_ia32_psllv8si",
106-
"llvm.x86.avx2.psllv.q" => "__builtin_ia32_psllv2di",
107-
"llvm.x86.avx2.psllv.q.256" => "__builtin_ia32_psllv4di",
108-
"llvm.x86.avx2.psra.w" => "__builtin_ia32_psraw256",
109-
"llvm.x86.avx2.psra.d" => "__builtin_ia32_psrad256",
110-
"llvm.x86.avx2.psrai.w" => "__builtin_ia32_psrawi256",
111-
"llvm.x86.avx2.psrai.d" => "__builtin_ia32_psradi256",
112-
"llvm.x86.avx2.psrav.d" => "__builtin_ia32_psrav4si",
113-
"llvm.x86.avx2.psrav.d.256" => "__builtin_ia32_psrav8si",
114-
"llvm.x86.avx2.psrl.w" => "__builtin_ia32_psrlw256",
115-
"llvm.x86.avx2.psrl.d" => "__builtin_ia32_psrld256",
116-
"llvm.x86.avx2.psrl.q" => "__builtin_ia32_psrlq256",
117-
"llvm.x86.avx2.psrlv.d" => "__builtin_ia32_psrlv4si",
118-
"llvm.x86.avx2.psrlv.d.256" => "__builtin_ia32_psrlv8si",
119-
"llvm.x86.avx2.psrlv.q" => "__builtin_ia32_psrlv2di",
120-
"llvm.x86.avx2.psrlv.q.256" => "__builtin_ia32_psrlv4di",
121-
"llvm.x86.sse.sqrt.ss" => "__builtin_ia32_sqrtss",
122-
"llvm.x86.pclmulqdq" => "__builtin_ia32_pclmulqdq128",
123-
"llvm.x86.sha1msg1" => "__builtin_ia32_sha1msg1",
124-
"llvm.x86.sha1msg2" => "__builtin_ia32_sha1msg2",
125-
"llvm.x86.sha1nexte" => "__builtin_ia32_sha1nexte",
126-
"llvm.x86.sha1rnds4" => "__builtin_ia32_sha1rnds4",
127-
"llvm.x86.sha256msg1" => "__builtin_ia32_sha256msg1",
128-
"llvm.x86.sha256msg2" => "__builtin_ia32_sha256msg2",
129-
"llvm.x86.sha256rnds2" => "__builtin_ia32_sha256rnds2",
130-
131-
"llvm.sqrt.v2f64" => "__builtin_ia32_sqrtpd",
132-
_ => unimplemented!("***** unsupported LLVM intrinsic {}", name),
133-
};
6+
let gcc_name = match name {
7+
"llvm.x86.xgetbv" => "__builtin_ia32_xgetbv",
8+
// NOTE: this doc specifies the equivalent GCC builtins: http://huonw.github.io/llvmint/llvmint/x86/index.html
9+
"llvm.sqrt.v2f64" => "__builtin_ia32_sqrtpd",
10+
// NOTE: this file is generated by https://github.com/GuillaumeGomez/llvmint/blob/master/generate_list.py
11+
_ => include!("x86.rs"),
12+
};
13413

13514
let func = cx.context.get_target_builtin_function(gcc_name);
13615
cx.functions.borrow_mut().insert(gcc_name.to_string(), func);

0 commit comments

Comments
 (0)