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 intel { 39 requires x86 40 export * 41 42 header "immintrin.h" 43 textual header "f16cintrin.h" 44 textual header "avxintrin.h" 45 textual header "avx2intrin.h" 46 textual header "avx512fintrin.h" 47 textual header "avx512erintrin.h" 48 textual header "fmaintrin.h" 49 50 header "x86intrin.h" 51 textual header "bmiintrin.h" 52 textual header "bmi2intrin.h" 53 textual header "lzcntintrin.h" 54 textual header "xopintrin.h" 55 textual header "fma4intrin.h" 56 textual header "mwaitxintrin.h" 57 textual header "clzerointrin.h" 58 textual header "wbnoinvdintrin.h" 59 textual header "cldemoteintrin.h" 60 textual header "waitpkgintrin.h" 61 textual header "movdirintrin.h" 62 textual header "pconfigintrin.h" 63 textual header "sgxintrin.h" 64 textual header "ptwriteintrin.h" 65 textual header "invpcidintrin.h" 66 67 textual header "__wmmintrin_aes.h" 68 textual header "__wmmintrin_pclmul.h" 69 70 explicit module mm_malloc { 71 requires !freestanding 72 header "mm_malloc.h" 73 export * // note: for <stdlib.h> dependency 74 } 75 76 explicit module cpuid { 77 requires gnuinlineasm 78 header "cpuid.h" 79 } 80 81 explicit module mmx { 82 header "mmintrin.h" 83 } 84 85 explicit module sse { 86 export mm_malloc 87 export mmx 88 export sse2 // note: for hackish <emmintrin.h> dependency 89 header "xmmintrin.h" 90 } 91 92 explicit module sse2 { 93 export sse 94 header "emmintrin.h" 95 } 96 97 explicit module sse3 { 98 export sse2 99 header "pmmintrin.h" 100 } 101 102 explicit module ssse3 { 103 export sse3 104 header "tmmintrin.h" 105 } 106 107 explicit module sse4_1 { 108 export ssse3 109 header "smmintrin.h" 110 } 111 112 explicit module sse4_2 { 113 export sse4_1 114 header "nmmintrin.h" 115 } 116 117 explicit module sse4a { 118 export sse3 119 header "ammintrin.h" 120 } 121 122 explicit module popcnt { 123 header "popcntintrin.h" 124 } 125 126 explicit module mm3dnow { 127 header "mm3dnow.h" 128 } 129 130 explicit module aes_pclmul { 131 header "wmmintrin.h" 132 export aes 133 export pclmul 134 } 135 } 136 137 explicit module systemz { 138 requires systemz 139 export * 140 141 header "s390intrin.h" 142 143 explicit module htm { 144 requires htm 145 header "htmintrin.h" 146 header "htmxlintrin.h" 147 } 148 149 explicit module zvector { 150 requires zvector, vx 151 header "vecintrin.h" 152 } 153 } 154} 155 156// Start -fbuiltin-headers-in-system-modules affected modules 157 158// The following modules all ignore their top level headers 159// when -fbuiltin-headers-in-system-modules is passed, and 160// most of those headers join system modules when present. 161 162// e.g. if -fbuiltin-headers-in-system-modules is passed, then 163// float.h will not be in the _Builtin_float module (that module 164// will be empty). If there is a system module that declares 165// `header "float.h"`, then the builtin float.h will join 166// that module. The system float.h (if present) will be treated 167// as a textual header in the sytem module. 168module _Builtin_float [system] { 169 header "float.h" 170 export * 171} 172 173module _Builtin_inttypes [system] { 174 header "inttypes.h" 175 export * 176} 177 178module _Builtin_iso646 [system] { 179 header "iso646.h" 180 export * 181} 182 183module _Builtin_limits [system] { 184 header "limits.h" 185 export * 186} 187 188module _Builtin_stdalign [system] { 189 header "stdalign.h" 190 export * 191} 192 193// When -fbuiltin-headers-in-system-modules is passed, only 194// the top level headers are removed, the implementation headers 195// will always be in their submodules. That means when stdarg.h 196// is included, it will still import this module and make the 197// appropriate submodules visible. 198module _Builtin_stdarg [system] { 199 textual header "stdarg.h" 200 201 explicit module __gnuc_va_list { 202 header "__stdarg___gnuc_va_list.h" 203 export * 204 } 205 206 explicit module __va_copy { 207 header "__stdarg___va_copy.h" 208 export * 209 } 210 211 explicit module va_arg { 212 header "__stdarg_va_arg.h" 213 export * 214 } 215 216 explicit module va_copy { 217 header "__stdarg_va_copy.h" 218 export * 219 } 220 221 explicit module va_list { 222 header "__stdarg_va_list.h" 223 export * 224 } 225} 226 227module _Builtin_stdatomic [system] { 228 header "stdatomic.h" 229 export * 230} 231 232module _Builtin_stdbool [system] { 233 header "stdbool.h" 234 export * 235} 236 237module _Builtin_stddef [system] { 238 textual header "stddef.h" 239 240 explicit module max_align_t { 241 header "__stddef_max_align_t.h" 242 export * 243 } 244 245 explicit module null { 246 header "__stddef_null.h" 247 export * 248 } 249 250 explicit module nullptr_t { 251 header "__stddef_nullptr_t.h" 252 export * 253 } 254 255 explicit module offsetof { 256 header "__stddef_offsetof.h" 257 export * 258 } 259 260 explicit module ptrdiff_t { 261 header "__stddef_ptrdiff_t.h" 262 export * 263 } 264 265 explicit module rsize_t { 266 header "__stddef_rsize_t.h" 267 export * 268 } 269 270 explicit module size_t { 271 header "__stddef_size_t.h" 272 export * 273 } 274 275 explicit module unreachable { 276 header "__stddef_unreachable.h" 277 export * 278 } 279 280 explicit module wchar_t { 281 header "__stddef_wchar_t.h" 282 export * 283 } 284} 285 286/* wint_t is provided by <wchar.h> and not <stddef.h>. It's here 287 * for compatibility, but must be explicitly requested. Therefore 288 * __stddef_wint_t.h is not part of _Builtin_stddef. */ 289module _Builtin_stddef_wint_t [system] { 290 header "__stddef_wint_t.h" 291 export * 292} 293 294module _Builtin_stdint [system] { 295 header "stdint.h" 296 export * 297} 298 299module _Builtin_stdnoreturn [system] { 300 header "stdnoreturn.h" 301 export * 302} 303 304module _Builtin_tgmath [system] { 305 header "tgmath.h" 306 export * 307} 308 309module _Builtin_unwind [system] { 310 header "unwind.h" 311 export * 312} 313// End -fbuiltin-headers-in-system-modules affected modules 314 315module opencl_c { 316 requires opencl 317 header "opencl-c.h" 318 header "opencl-c-base.h" 319} 320