1 //===-- Compile time architecture detection ---------------------*- C++ -*-===//
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 #ifndef LLVM_LIBC_SUPPORT_ARCHITECTURES_H
10 #define LLVM_LIBC_SUPPORT_ARCHITECTURES_H
11 
12 #if defined(__pnacl__) || defined(__CLR_VER)
13 #define LLVM_LIBC_ARCH_VM
14 #endif
15 
16 #if (defined(_M_IX86) || defined(__i386__)) && !defined(LLVM_LIBC_ARCH_VM)
17 #define LLVM_LIBC_ARCH_X86_32
18 #endif
19 
20 #if (defined(_M_X64) || defined(__x86_64__)) && !defined(LLVM_LIBC_ARCH_VM)
21 #define LLVM_LIBC_ARCH_X86_64
22 #endif
23 
24 #if defined(LLVM_LIBC_ARCH_X86_32) || defined(LLVM_LIBC_ARCH_X86_64)
25 #define LLVM_LIBC_ARCH_X86
26 #endif
27 
28 #if (defined(__arm__) || defined(_M_ARM))
29 #define LLVM_LIBC_ARCH_ARM
30 #endif
31 
32 #if defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64)
33 #define LLVM_LIBC_ARCH_AARCH64
34 #endif
35 
36 #if (defined(LLVM_LIBC_ARCH_AARCH64) || defined(LLVM_LIBC_ARCH_ARM))
37 #define LLVM_LIBC_ARCH_ANY_ARM
38 #endif
39 
40 #if defined(LLVM_LIBC_ARCH_AARCH64)
41 #define LIBC_TARGET_HAS_FMA
42 #elif defined(LLVM_LIBC_ARCH_X86_64)
43 #if (defined(__AVX2__) || defined(__FMA__))
44 #define LIBC_TARGET_HAS_FMA
45 #endif
46 #endif
47 
48 #endif // LLVM_LIBC_SUPPORT_ARCHITECTURES_H
49