10b57cec5SDimitry Andric/*===---- module.modulemap - intrinsics module map -------------------------===
20b57cec5SDimitry Andric *
30b57cec5SDimitry Andric * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric * See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric *
70b57cec5SDimitry Andric *===-----------------------------------------------------------------------===
80b57cec5SDimitry Andric */
90b57cec5SDimitry Andric
100b57cec5SDimitry Andricmodule _Builtin_intrinsics [system] [extern_c] {
110b57cec5SDimitry Andric  explicit module altivec {
120b57cec5SDimitry Andric    requires altivec
130b57cec5SDimitry Andric    header "altivec.h"
140b57cec5SDimitry Andric  }
150b57cec5SDimitry Andric
160b57cec5SDimitry Andric  explicit module arm {
170b57cec5SDimitry Andric    requires arm
180b57cec5SDimitry Andric
190b57cec5SDimitry Andric    explicit module acle {
200b57cec5SDimitry Andric      header "arm_acle.h"
210b57cec5SDimitry Andric      export *
220b57cec5SDimitry Andric    }
230b57cec5SDimitry Andric
240b57cec5SDimitry Andric    explicit module neon {
250b57cec5SDimitry Andric      requires neon
260b57cec5SDimitry Andric      header "arm_neon.h"
270b57cec5SDimitry Andric      header "arm_fp16.h"
280b57cec5SDimitry Andric      export *
290b57cec5SDimitry Andric    }
305ffd83dbSDimitry Andric
315ffd83dbSDimitry Andric    explicit module sve {
325ffd83dbSDimitry Andric      requires sve
335ffd83dbSDimitry Andric      header "arm_sve.h"
345ffd83dbSDimitry Andric      export *
355ffd83dbSDimitry Andric    }
360b57cec5SDimitry Andric  }
370b57cec5SDimitry Andric
380b57cec5SDimitry Andric  explicit module intel {
390b57cec5SDimitry Andric    requires x86
400b57cec5SDimitry Andric    export *
410b57cec5SDimitry Andric
420b57cec5SDimitry Andric    header "immintrin.h"
430b57cec5SDimitry Andric    textual header "f16cintrin.h"
440b57cec5SDimitry Andric    textual header "avxintrin.h"
450b57cec5SDimitry Andric    textual header "avx2intrin.h"
460b57cec5SDimitry Andric    textual header "avx512fintrin.h"
470b57cec5SDimitry Andric    textual header "avx512erintrin.h"
480b57cec5SDimitry Andric    textual header "fmaintrin.h"
490b57cec5SDimitry Andric
500b57cec5SDimitry Andric    header "x86intrin.h"
510b57cec5SDimitry Andric    textual header "bmiintrin.h"
520b57cec5SDimitry Andric    textual header "bmi2intrin.h"
530b57cec5SDimitry Andric    textual header "lzcntintrin.h"
540b57cec5SDimitry Andric    textual header "xopintrin.h"
550b57cec5SDimitry Andric    textual header "fma4intrin.h"
560b57cec5SDimitry Andric    textual header "mwaitxintrin.h"
570b57cec5SDimitry Andric    textual header "clzerointrin.h"
580b57cec5SDimitry Andric    textual header "wbnoinvdintrin.h"
590b57cec5SDimitry Andric    textual header "cldemoteintrin.h"
600b57cec5SDimitry Andric    textual header "waitpkgintrin.h"
610b57cec5SDimitry Andric    textual header "movdirintrin.h"
620b57cec5SDimitry Andric    textual header "pconfigintrin.h"
630b57cec5SDimitry Andric    textual header "sgxintrin.h"
640b57cec5SDimitry Andric    textual header "ptwriteintrin.h"
650b57cec5SDimitry Andric    textual header "invpcidintrin.h"
660b57cec5SDimitry Andric
670b57cec5SDimitry Andric    textual header "__wmmintrin_aes.h"
680b57cec5SDimitry Andric    textual header "__wmmintrin_pclmul.h"
690b57cec5SDimitry Andric
700b57cec5SDimitry Andric    explicit module mm_malloc {
710b57cec5SDimitry Andric      requires !freestanding
720b57cec5SDimitry Andric      header "mm_malloc.h"
730b57cec5SDimitry Andric      export * // note: for <stdlib.h> dependency
740b57cec5SDimitry Andric    }
750b57cec5SDimitry Andric
760b57cec5SDimitry Andric    explicit module cpuid {
770b57cec5SDimitry Andric      requires gnuinlineasm
780b57cec5SDimitry Andric      header "cpuid.h"
790b57cec5SDimitry Andric    }
800b57cec5SDimitry Andric
810b57cec5SDimitry Andric    explicit module mmx {
820b57cec5SDimitry Andric      header "mmintrin.h"
830b57cec5SDimitry Andric    }
840b57cec5SDimitry Andric
850b57cec5SDimitry Andric    explicit module sse {
860b57cec5SDimitry Andric      export mm_malloc
870b57cec5SDimitry Andric      export mmx
880b57cec5SDimitry Andric      export sse2 // note: for hackish <emmintrin.h> dependency
890b57cec5SDimitry Andric      header "xmmintrin.h"
900b57cec5SDimitry Andric    }
910b57cec5SDimitry Andric
920b57cec5SDimitry Andric    explicit module sse2 {
930b57cec5SDimitry Andric      export sse
940b57cec5SDimitry Andric      header "emmintrin.h"
950b57cec5SDimitry Andric    }
960b57cec5SDimitry Andric
970b57cec5SDimitry Andric    explicit module sse3 {
980b57cec5SDimitry Andric      export sse2
990b57cec5SDimitry Andric      header "pmmintrin.h"
1000b57cec5SDimitry Andric    }
1010b57cec5SDimitry Andric
1020b57cec5SDimitry Andric    explicit module ssse3 {
1030b57cec5SDimitry Andric      export sse3
1040b57cec5SDimitry Andric      header "tmmintrin.h"
1050b57cec5SDimitry Andric    }
1060b57cec5SDimitry Andric
1070b57cec5SDimitry Andric    explicit module sse4_1 {
1080b57cec5SDimitry Andric      export ssse3
1090b57cec5SDimitry Andric      header "smmintrin.h"
1100b57cec5SDimitry Andric    }
1110b57cec5SDimitry Andric
1120b57cec5SDimitry Andric    explicit module sse4_2 {
1130b57cec5SDimitry Andric      export sse4_1
1140b57cec5SDimitry Andric      header "nmmintrin.h"
1150b57cec5SDimitry Andric    }
1160b57cec5SDimitry Andric
1170b57cec5SDimitry Andric    explicit module sse4a {
1180b57cec5SDimitry Andric      export sse3
1190b57cec5SDimitry Andric      header "ammintrin.h"
1200b57cec5SDimitry Andric    }
1210b57cec5SDimitry Andric
1220b57cec5SDimitry Andric    explicit module popcnt {
1230b57cec5SDimitry Andric      header "popcntintrin.h"
1240b57cec5SDimitry Andric    }
1250b57cec5SDimitry Andric
1260b57cec5SDimitry Andric    explicit module mm3dnow {
1270b57cec5SDimitry Andric      header "mm3dnow.h"
1280b57cec5SDimitry Andric    }
1290b57cec5SDimitry Andric
1300b57cec5SDimitry Andric    explicit module aes_pclmul {
1310b57cec5SDimitry Andric      header "wmmintrin.h"
1320b57cec5SDimitry Andric      export aes
1330b57cec5SDimitry Andric      export pclmul
1340b57cec5SDimitry Andric    }
1350b57cec5SDimitry Andric  }
1360b57cec5SDimitry Andric
1370b57cec5SDimitry Andric  explicit module systemz {
1380b57cec5SDimitry Andric    requires systemz
1390b57cec5SDimitry Andric    export *
1400b57cec5SDimitry Andric
1410b57cec5SDimitry Andric    header "s390intrin.h"
1420b57cec5SDimitry Andric
1430b57cec5SDimitry Andric    explicit module htm {
1440b57cec5SDimitry Andric      requires htm
1450b57cec5SDimitry Andric      header "htmintrin.h"
1460b57cec5SDimitry Andric      header "htmxlintrin.h"
1470b57cec5SDimitry Andric    }
1480b57cec5SDimitry Andric
1490b57cec5SDimitry Andric    explicit module zvector {
1500b57cec5SDimitry Andric      requires zvector, vx
1510b57cec5SDimitry Andric      header "vecintrin.h"
1520b57cec5SDimitry Andric    }
1530b57cec5SDimitry Andric  }
1540b57cec5SDimitry Andric}
1550b57cec5SDimitry Andric
1565f757f3fSDimitry Andric// Start -fbuiltin-headers-in-system-modules affected modules
1575f757f3fSDimitry Andric
158439352acSDimitry Andric// The following modules all ignore their headers when
159439352acSDimitry Andric// -fbuiltin-headers-in-system-modules is passed, and many of
160439352acSDimitry Andric// those headers join system modules when present.
1615f757f3fSDimitry Andric
1625f757f3fSDimitry Andric// e.g. if -fbuiltin-headers-in-system-modules is passed, then
1635f757f3fSDimitry Andric// float.h will not be in the _Builtin_float module (that module
1645f757f3fSDimitry Andric// will be empty). If there is a system module that declares
1655f757f3fSDimitry Andric// `header "float.h"`, then the builtin float.h will join
1665f757f3fSDimitry Andric// that module. The system float.h (if present) will be treated
1675f757f3fSDimitry Andric// as a textual header in the sytem module.
1685f757f3fSDimitry Andricmodule _Builtin_float [system] {
1695f757f3fSDimitry Andric  header "float.h"
1705f757f3fSDimitry Andric  export *
1710b57cec5SDimitry Andric}
1720b57cec5SDimitry Andric
1735f757f3fSDimitry Andricmodule _Builtin_inttypes [system] {
1745f757f3fSDimitry Andric  header "inttypes.h"
1755f757f3fSDimitry Andric  export *
1765f757f3fSDimitry Andric}
1775f757f3fSDimitry Andric
1785f757f3fSDimitry Andricmodule _Builtin_iso646 [system] {
1795f757f3fSDimitry Andric  header "iso646.h"
1805f757f3fSDimitry Andric  export *
1815f757f3fSDimitry Andric}
1825f757f3fSDimitry Andric
1835f757f3fSDimitry Andricmodule _Builtin_limits [system] {
1845f757f3fSDimitry Andric  header "limits.h"
1855f757f3fSDimitry Andric  export *
1865f757f3fSDimitry Andric}
1875f757f3fSDimitry Andric
1885f757f3fSDimitry Andricmodule _Builtin_stdalign [system] {
1895f757f3fSDimitry Andric  header "stdalign.h"
1905f757f3fSDimitry Andric  export *
1915f757f3fSDimitry Andric}
1925f757f3fSDimitry Andric
1935f757f3fSDimitry Andricmodule _Builtin_stdarg [system] {
1945f757f3fSDimitry Andric  textual header "stdarg.h"
1955f757f3fSDimitry Andric
1965f757f3fSDimitry Andric  explicit module __gnuc_va_list {
1975f757f3fSDimitry Andric    header "__stdarg___gnuc_va_list.h"
1985f757f3fSDimitry Andric    export *
1995f757f3fSDimitry Andric  }
2005f757f3fSDimitry Andric
2015f757f3fSDimitry Andric  explicit module __va_copy {
2025f757f3fSDimitry Andric    header "__stdarg___va_copy.h"
2035f757f3fSDimitry Andric    export *
2045f757f3fSDimitry Andric  }
2055f757f3fSDimitry Andric
2065f757f3fSDimitry Andric  explicit module va_arg {
2075f757f3fSDimitry Andric    header "__stdarg_va_arg.h"
2085f757f3fSDimitry Andric    export *
2095f757f3fSDimitry Andric  }
2105f757f3fSDimitry Andric
2115f757f3fSDimitry Andric  explicit module va_copy {
2125f757f3fSDimitry Andric    header "__stdarg_va_copy.h"
2135f757f3fSDimitry Andric    export *
2145f757f3fSDimitry Andric  }
2155f757f3fSDimitry Andric
2165f757f3fSDimitry Andric  explicit module va_list {
2175f757f3fSDimitry Andric    header "__stdarg_va_list.h"
2185f757f3fSDimitry Andric    export *
2195f757f3fSDimitry Andric  }
2205f757f3fSDimitry Andric}
2215f757f3fSDimitry Andric
2225f757f3fSDimitry Andricmodule _Builtin_stdatomic [system] {
2235f757f3fSDimitry Andric  header "stdatomic.h"
2245f757f3fSDimitry Andric  export *
2255f757f3fSDimitry Andric}
2265f757f3fSDimitry Andric
2275f757f3fSDimitry Andricmodule _Builtin_stdbool [system] {
2285f757f3fSDimitry Andric  header "stdbool.h"
2295f757f3fSDimitry Andric  export *
2305f757f3fSDimitry Andric}
2315f757f3fSDimitry Andric
2325f757f3fSDimitry Andricmodule _Builtin_stddef [system] {
2335f757f3fSDimitry Andric  textual header "stddef.h"
2345f757f3fSDimitry Andric
235439352acSDimitry Andric  // __stddef_max_align_t.h is always in this module, even if
236439352acSDimitry Andric  // -fbuiltin-headers-in-system-modules is passed.
2375f757f3fSDimitry Andric  explicit module max_align_t {
2385f757f3fSDimitry Andric    header "__stddef_max_align_t.h"
2395f757f3fSDimitry Andric    export *
2405f757f3fSDimitry Andric  }
2415f757f3fSDimitry Andric
2425f757f3fSDimitry Andric  explicit module null {
2435f757f3fSDimitry Andric    header "__stddef_null.h"
2445f757f3fSDimitry Andric    export *
2455f757f3fSDimitry Andric  }
2465f757f3fSDimitry Andric
2475f757f3fSDimitry Andric  explicit module nullptr_t {
2485f757f3fSDimitry Andric    header "__stddef_nullptr_t.h"
2495f757f3fSDimitry Andric    export *
2505f757f3fSDimitry Andric  }
2515f757f3fSDimitry Andric
2525f757f3fSDimitry Andric  explicit module offsetof {
2535f757f3fSDimitry Andric    header "__stddef_offsetof.h"
2545f757f3fSDimitry Andric    export *
2555f757f3fSDimitry Andric  }
2565f757f3fSDimitry Andric
2575f757f3fSDimitry Andric  explicit module ptrdiff_t {
2585f757f3fSDimitry Andric    header "__stddef_ptrdiff_t.h"
2595f757f3fSDimitry Andric    export *
2605f757f3fSDimitry Andric  }
2615f757f3fSDimitry Andric
2625f757f3fSDimitry Andric  explicit module rsize_t {
2635f757f3fSDimitry Andric    header "__stddef_rsize_t.h"
2645f757f3fSDimitry Andric    export *
2655f757f3fSDimitry Andric  }
2665f757f3fSDimitry Andric
2675f757f3fSDimitry Andric  explicit module size_t {
2685f757f3fSDimitry Andric    header "__stddef_size_t.h"
2695f757f3fSDimitry Andric    export *
2705f757f3fSDimitry Andric  }
2715f757f3fSDimitry Andric
2725f757f3fSDimitry Andric  explicit module unreachable {
2735f757f3fSDimitry Andric    header "__stddef_unreachable.h"
2745f757f3fSDimitry Andric    export *
2755f757f3fSDimitry Andric  }
2765f757f3fSDimitry Andric
2775f757f3fSDimitry Andric  explicit module wchar_t {
2785f757f3fSDimitry Andric    header "__stddef_wchar_t.h"
2795f757f3fSDimitry Andric    export *
2805f757f3fSDimitry Andric  }
2815f757f3fSDimitry Andric}
2825f757f3fSDimitry Andric
283439352acSDimitry Andric// wint_t is provided by <wchar.h> and not <stddef.h>. It's here
284439352acSDimitry Andric// for compatibility, but must be explicitly requested. Therefore
285439352acSDimitry Andric// __stddef_wint_t.h is not part of _Builtin_stddef. It is always in
286439352acSDimitry Andric// this module even if -fbuiltin-headers-in-system-modules is passed.
2875f757f3fSDimitry Andricmodule _Builtin_stddef_wint_t [system] {
2885f757f3fSDimitry Andric  header "__stddef_wint_t.h"
2895f757f3fSDimitry Andric  export *
2905f757f3fSDimitry Andric}
2915f757f3fSDimitry Andric
2925f757f3fSDimitry Andricmodule _Builtin_stdint [system] {
2935f757f3fSDimitry Andric  header "stdint.h"
2945f757f3fSDimitry Andric  export *
2955f757f3fSDimitry Andric}
2965f757f3fSDimitry Andric
2975f757f3fSDimitry Andricmodule _Builtin_stdnoreturn [system] {
2985f757f3fSDimitry Andric  header "stdnoreturn.h"
2995f757f3fSDimitry Andric  export *
3005f757f3fSDimitry Andric}
3015f757f3fSDimitry Andric
3025f757f3fSDimitry Andricmodule _Builtin_tgmath [system] {
3035f757f3fSDimitry Andric  header "tgmath.h"
3045f757f3fSDimitry Andric  export *
3055f757f3fSDimitry Andric}
3065f757f3fSDimitry Andric
3075f757f3fSDimitry Andricmodule _Builtin_unwind [system] {
3085f757f3fSDimitry Andric  header "unwind.h"
3095f757f3fSDimitry Andric  export *
3105f757f3fSDimitry Andric}
3115f757f3fSDimitry Andric// End -fbuiltin-headers-in-system-modules affected modules
3125f757f3fSDimitry Andric
3130b57cec5SDimitry Andricmodule opencl_c {
3140b57cec5SDimitry Andric  requires opencl
3150b57cec5SDimitry Andric  header "opencl-c.h"
3160b57cec5SDimitry Andric  header "opencl-c-base.h"
3170b57cec5SDimitry Andric}
318