1/*===---- module.modulemap - intrinsics module map -------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10module _Builtin_intrinsics [system] [extern_c] {
11 explicit module altivec {
12 requires altivec
13 header "altivec.h"
14 }
15
16 explicit module arm {
17 requires arm
18
19 explicit module acle {
20 header "arm_acle.h"
21 export *
22 }
23
24 explicit module neon {
25 requires neon
26 header "arm_neon.h"
27 header "arm_fp16.h"
28 export *
29 }
30
31 explicit module sve {
32 requires sve
33 header "arm_sve.h"
34 export *
35 }
36 }
37
38 explicit module arm64 {
39 requires arm64
40 requires windows
41
42 header "arm64intr.h"
43 export *
44 }
45
46 explicit module intel {
47 requires x86
48 export *
49
50 header "immintrin.h"
51 textual header "f16cintrin.h"
52 textual header "avxintrin.h"
53 textual header "avx2intrin.h"
54 textual header "avx512fintrin.h"
55 textual header "fmaintrin.h"
56
57 header "x86intrin.h"
58 textual header "bmiintrin.h"
59 textual header "bmi2intrin.h"
60 textual header "lzcntintrin.h"
61 textual header "xopintrin.h"
62 textual header "fma4intrin.h"
63 textual header "mwaitxintrin.h"
64 textual header "clzerointrin.h"
65 textual header "wbnoinvdintrin.h"
66 textual header "cldemoteintrin.h"
67 textual header "waitpkgintrin.h"
68 textual header "movdirintrin.h"
69 textual header "pconfigintrin.h"
70 textual header "sgxintrin.h"
71 textual header "ptwriteintrin.h"
72 textual header "invpcidintrin.h"
73
74 textual header "__wmmintrin_aes.h"
75 textual header "__wmmintrin_pclmul.h"
76
77 textual header "mm3dnow.h"
78
79 explicit module mm_malloc {
80 requires !freestanding
81 header "mm_malloc.h"
82 export * // note: for <stdlib.h> dependency
83 }
84
85 explicit module cpuid {
86 requires gnuinlineasm
87 header "cpuid.h"
88 }
89
90 explicit module mmx {
91 header "mmintrin.h"
92 }
93
94 explicit module sse {
95 export mm_malloc
96 export mmx
97 export sse2 // note: for hackish <emmintrin.h> dependency
98 header "xmmintrin.h"
99 }
100
101 explicit module sse2 {
102 export sse
103 header "emmintrin.h"
104 }
105
106 explicit module sse3 {
107 export sse2
108 header "pmmintrin.h"
109 }
110
111 explicit module ssse3 {
112 export sse3
113 header "tmmintrin.h"
114 }
115
116 explicit module sse4_1 {
117 export ssse3
118 header "smmintrin.h"
119 }
120
121 explicit module sse4_2 {
122 export sse4_1
123 header "nmmintrin.h"
124 }
125
126 explicit module sse4a {
127 export sse3
128 header "ammintrin.h"
129 }
130
131 explicit module popcnt {
132 header "popcntintrin.h"
133 }
134
135 explicit module aes_pclmul {
136 header "wmmintrin.h"
137 export aes
138 export pclmul
139 }
140 }
141
142 explicit module systemz {
143 requires systemz
144 export *
145
146 header "s390intrin.h"
147
148 explicit module htm {
149 requires htm
150 header "htmintrin.h"
151 header "htmxlintrin.h"
152 }
153
154 explicit module zvector {
155 requires zvector, vx
156 header "vecintrin.h"
157 }
158 }
159}
160
161// Start -fbuiltin-headers-in-system-modules affected modules
162
163// The following modules all ignore their headers when
164// -fbuiltin-headers-in-system-modules is passed, and many of
165// those headers join system modules when present.
166
167// e.g. if -fbuiltin-headers-in-system-modules is passed, then
168// float.h will not be in the _Builtin_float module (that module
169// will be empty). If there is a system module that declares
170// `header "float.h"`, then the builtin float.h will join
171// that module. The system float.h (if present) will be treated
172// as a textual header in the sytem module.
173module _Builtin_float [system] {
174 textual header "float.h"
175
176 explicit module float {
177 header "__float_float.h"
178 export *
179 }
180
181 explicit module header_macro {
182 header "__float_header_macro.h"
183 export *
184 }
185
186 explicit module infinity_nan {
187 header "__float_infinity_nan.h"
188 export *
189 }
190}
191
192module _Builtin_inttypes [system] {
193 header "inttypes.h"
194 export *
195}
196
197module _Builtin_iso646 [system] {
198 header "iso646.h"
199 export *
200}
201
202module _Builtin_limits [system] {
203 header "limits.h"
204 export *
205}
206
207module _Builtin_stdalign [system] {
208 header "stdalign.h"
209 export *
210}
211
212module _Builtin_stdarg [system] {
213 textual header "stdarg.h"
214
215 explicit module __gnuc_va_list {
216 header "__stdarg___gnuc_va_list.h"
217 export *
218 }
219
220 explicit module __va_copy {
221 header "__stdarg___va_copy.h"
222 export *
223 }
224
225 explicit module header_macro {
226 header "__stdarg_header_macro.h"
227 export *
228 }
229
230 explicit module va_arg {
231 header "__stdarg_va_arg.h"
232 export *
233 }
234
235 explicit module va_copy {
236 header "__stdarg_va_copy.h"
237 export *
238 }
239
240 explicit module va_list {
241 header "__stdarg_va_list.h"
242 export *
243 }
244}
245
246module _Builtin_stdatomic [system] {
247 header "stdatomic.h"
248 export *
249}
250
251module _Builtin_stdbool [system] {
252 header "stdbool.h"
253 export *
254}
255
256module _Builtin_stdckdint [system] {
257 header "stdckdint.h"
258 export *
259}
260
261module _Builtin_stdcountof [system] {
262 header "stdcountof.h"
263 export *
264}
265
266module _Builtin_stddef [system] {
267 textual header "stddef.h"
268
269 explicit module header_macro {
270 header "__stddef_header_macro.h"
271 export *
272 }
273 // __stddef_max_align_t.h is always in this module, even if
274 // -fbuiltin-headers-in-system-modules is passed.
275 explicit module max_align_t {
276 header "__stddef_max_align_t.h"
277 export *
278 }
279
280 explicit module null {
281 header "__stddef_null.h"
282 export *
283 }
284
285 explicit module nullptr_t {
286 header "__stddef_nullptr_t.h"
287 export *
288 }
289
290 explicit module offsetof {
291 header "__stddef_offsetof.h"
292 export *
293 }
294
295 explicit module ptrdiff_t {
296 header "__stddef_ptrdiff_t.h"
297 export *
298 }
299
300 explicit module rsize_t {
301 header "__stddef_rsize_t.h"
302 export *
303 }
304
305 explicit module size_t {
306 header "__stddef_size_t.h"
307 export *
308 }
309
310 explicit module unreachable {
311 header "__stddef_unreachable.h"
312 export *
313 }
314
315 explicit module wchar_t {
316 header "__stddef_wchar_t.h"
317 export *
318 }
319}
320
321// wint_t is provided by <wchar.h> and not <stddef.h>. It's here
322// for compatibility, but must be explicitly requested. Therefore
323// __stddef_wint_t.h is not part of _Builtin_stddef. It is always in
324// this module even if -fbuiltin-headers-in-system-modules is passed.
325module _Builtin_stddef_wint_t [system] {
326 header "__stddef_wint_t.h"
327 export *
328}
329
330module _Builtin_stdint [system] {
331 header "stdint.h"
332 export *
333}
334
335module _Builtin_stdnoreturn [system] {
336 header "stdnoreturn.h"
337 export *
338}
339
340module _Builtin_tgmath [system] {
341 header "tgmath.h"
342 export *
343}
344
345module _Builtin_unwind [system] {
346 header "unwind.h"
347 export *
348}
349// End -fbuiltin-headers-in-system-modules affected modules
350
351module opencl_c [system] {
352 requires opencl
353 header "opencl-c.h"
354 header "opencl-c-base.h"
355}
356
357module ptrauth [system] {
358 header "ptrauth.h"
359 export *
360}