| 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 | |
| 10 | module _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. |
| 173 | module _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 | |
| 192 | module _Builtin_inttypes [system] { |
| 193 | header "inttypes.h" |
| 194 | export * |
| 195 | } |
| 196 | |
| 197 | module _Builtin_iso646 [system] { |
| 198 | header "iso646.h" |
| 199 | export * |
| 200 | } |
| 201 | |
| 202 | module _Builtin_limits [system] { |
| 203 | header "limits.h" |
| 204 | export * |
| 205 | } |
| 206 | |
| 207 | module _Builtin_stdalign [system] { |
| 208 | header "stdalign.h" |
| 209 | export * |
| 210 | } |
| 211 | |
| 212 | module _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 | |
| 246 | module _Builtin_stdatomic [system] { |
| 247 | header "stdatomic.h" |
| 248 | export * |
| 249 | } |
| 250 | |
| 251 | module _Builtin_stdbool [system] { |
| 252 | header "stdbool.h" |
| 253 | export * |
| 254 | } |
| 255 | |
| 256 | module _Builtin_stdckdint [system] { |
| 257 | header "stdckdint.h" |
| 258 | export * |
| 259 | } |
| 260 | |
| 261 | module _Builtin_stdcountof [system] { |
| 262 | header "stdcountof.h" |
| 263 | export * |
| 264 | } |
| 265 | |
| 266 | module _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. |
| 325 | module _Builtin_stddef_wint_t [system] { |
| 326 | header "__stddef_wint_t.h" |
| 327 | export * |
| 328 | } |
| 329 | |
| 330 | module _Builtin_stdint [system] { |
| 331 | header "stdint.h" |
| 332 | export * |
| 333 | } |
| 334 | |
| 335 | module _Builtin_stdnoreturn [system] { |
| 336 | header "stdnoreturn.h" |
| 337 | export * |
| 338 | } |
| 339 | |
| 340 | module _Builtin_tgmath [system] { |
| 341 | header "tgmath.h" |
| 342 | export * |
| 343 | } |
| 344 | |
| 345 | module _Builtin_unwind [system] { |
| 346 | header "unwind.h" |
| 347 | export * |
| 348 | } |
| 349 | // End -fbuiltin-headers-in-system-modules affected modules |
| 350 | |
| 351 | module opencl_c [system] { |
| 352 | requires opencl |
| 353 | header "opencl-c.h" |
| 354 | header "opencl-c-base.h" |
| 355 | } |
| 356 | |
| 357 | module ptrauth [system] { |
| 358 | header "ptrauth.h" |
| 359 | export * |
| 360 | } |