mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-12 04:09:01 +08:00
1351 lines
58 KiB
Diff
1351 lines
58 KiB
Diff
|
From afec08ef9f1015ea3fe8d67b92acfbb7837c6e9f Mon Sep 17 00:00:00 2001
|
||
|
From: Max Winkler <max.enrico.winkler@gmail.com>
|
||
|
Date: Tue, 19 Mar 2024 08:30:54 -0400
|
||
|
Subject: [PATCH] [clang] Add `intrin0.h` header to mimic `intrin0.h` used by
|
||
|
MSVC STL for clang-cl (#75711)
|
||
|
|
||
|
Fixes https://github.com/llvm/llvm-project/issues/53520.
|
||
|
|
||
|
#### Description ####
|
||
|
|
||
|
Provide `intrin0.h` to be the minimal set of intrinsics that the MSVC
|
||
|
STL requires.
|
||
|
The `intrin0.h` header matches the latest header provided by MSVC 1939
|
||
|
which does include some extra intrinsics that the MSVC STL does not use.
|
||
|
|
||
|
Inside `BuiltinHeaders.def` I kept the header description as `intrin.h`.
|
||
|
If you want me to change those to `intrin0.h` for the moved intrinsics
|
||
|
let me know.
|
||
|
|
||
|
This should now allow `immintrin.h` to be used with function targets for
|
||
|
runtime cpu detection of simd instruction sets without worrying about
|
||
|
the compile-time overhead from MSVC STL including `intrin.h` on clang.
|
||
|
|
||
|
I still need to figure out how to best update MSVC STL to detect for the
|
||
|
presence of `intrin0.h` from clang and to use this header over
|
||
|
`intrin.h`.
|
||
|
|
||
|
#### Testing ####
|
||
|
|
||
|
Built clang locally and ran the test suite. I still need to do a pass
|
||
|
over the existing unit tests for the ms intrinsics to make sure there
|
||
|
aren't any gaps. Wanted to get this PR up for discussion first.
|
||
|
|
||
|
Modified latest MSVC STL from github to point to `intrin0.h` for clang.
|
||
|
|
||
|
Wrote some test files that included MSVC STL headers that rely on
|
||
|
intrinsics such as `atomic`, `bit` and `vector`. Built the unit tests
|
||
|
against x86, arm, aarch64, and x64.
|
||
|
|
||
|
#### Benchmarks ####
|
||
|
|
||
|
The following include times are based on the x64 target with the
|
||
|
modified headers in this PR.
|
||
|
These timings were done by using `clang-cl.exe -ftime-trace` and taking
|
||
|
the wall time for parsing `intrin.h` and `intrin0.h`.
|
||
|
|
||
|
`intrin.h` takes ~897ms to parse.
|
||
|
`intrin0.h` takes ~1ms to parse.
|
||
|
|
||
|
If there is anything required or a different approach is preferred let
|
||
|
me know. I would very much like to move this over the finish line so we
|
||
|
can use function targets with clang-cl.
|
||
|
---
|
||
|
clang/lib/Headers/CMakeLists.txt | 2 +
|
||
|
clang/lib/Headers/bmiintrin.h | 6 +-
|
||
|
clang/lib/Headers/immintrin.h | 240 ++++++++++-----------------
|
||
|
clang/lib/Headers/intrin.h | 217 +-----------------------
|
||
|
clang/lib/Headers/intrin0.h | 247 ++++++++++++++++++++++++++++
|
||
|
clang/lib/Headers/keylockerintrin.h | 13 +-
|
||
|
clang/lib/Headers/x86gprintrin.h | 21 +--
|
||
|
clang/lib/Headers/x86intrin.h | 30 ++--
|
||
|
clang/lib/Headers/yvals_core.h | 25 +++
|
||
|
10 files changed, 408 insertions(+), 413 deletions(-)
|
||
|
create mode 100644 clang/lib/Headers/intrin0.h
|
||
|
create mode 100644 clang/lib/Headers/yvals_core.h
|
||
|
|
||
|
diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt
|
||
|
index 902e33bb95897c..97104ccd8db59c 100644
|
||
|
--- a/clang/lib/Headers/CMakeLists.txt
|
||
|
+++ b/clang/lib/Headers/CMakeLists.txt
|
||
|
@@ -254,8 +254,10 @@ set(x86_files
|
||
|
)
|
||
|
|
||
|
set(windows_only_files
|
||
|
+ intrin0.h
|
||
|
intrin.h
|
||
|
vadefs.h
|
||
|
+ yvals_core.h
|
||
|
)
|
||
|
|
||
|
set(utility_files
|
||
|
diff --git a/clang/lib/Headers/bmiintrin.h b/clang/lib/Headers/bmiintrin.h
|
||
|
index d8e57c0cb49404..78bffe68e221a9 100644
|
||
|
--- a/clang/lib/Headers/bmiintrin.h
|
||
|
+++ b/clang/lib/Headers/bmiintrin.h
|
||
|
@@ -161,8 +161,7 @@ _mm_tzcnt_64(unsigned long long __X)
|
||
|
|
||
|
#undef __RELAXED_FN_ATTRS
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__BMI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__BMI__)
|
||
|
|
||
|
/* Define the default attributes for the functions in this file. */
|
||
|
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi")))
|
||
|
@@ -610,7 +609,6 @@ __blsr_u64(unsigned long long __X)
|
||
|
|
||
|
#undef __DEFAULT_FN_ATTRS
|
||
|
|
||
|
-#endif /* !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) \
|
||
|
- || defined(__BMI__) */
|
||
|
+#endif /* !defined(__SCE__) || __has_feature(modules) || defined(__BMI__) */
|
||
|
|
||
|
#endif /* __BMIINTRIN_H */
|
||
|
diff --git a/clang/lib/Headers/immintrin.h b/clang/lib/Headers/immintrin.h
|
||
|
index 27800f7a8202c1..508696d3725b9a 100644
|
||
|
--- a/clang/lib/Headers/immintrin.h
|
||
|
+++ b/clang/lib/Headers/immintrin.h
|
||
|
@@ -16,281 +16,239 @@
|
||
|
|
||
|
#include <x86gprintrin.h>
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__MMX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__MMX__)
|
||
|
#include <mmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SSE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SSE__)
|
||
|
#include <xmmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SSE2__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SSE2__)
|
||
|
#include <emmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SSE3__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SSE3__)
|
||
|
#include <pmmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SSSE3__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SSSE3__)
|
||
|
#include <tmmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__SSE4_2__) || defined(__SSE4_1__))
|
||
|
#include <smmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AES__) || defined(__PCLMUL__))
|
||
|
#include <wmmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CLFLUSHOPT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CLFLUSHOPT__)
|
||
|
#include <clflushoptintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CLWB__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CLWB__)
|
||
|
#include <clwbintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX__)
|
||
|
#include <avxintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX2__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX2__)
|
||
|
#include <avx2intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__F16C__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__F16C__)
|
||
|
#include <f16cintrin.h>
|
||
|
#endif
|
||
|
|
||
|
/* No feature check desired due to internal checks */
|
||
|
#include <bmiintrin.h>
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__BMI2__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__BMI2__)
|
||
|
#include <bmi2intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__LZCNT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__LZCNT__)
|
||
|
#include <lzcntintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__POPCNT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__POPCNT__)
|
||
|
#include <popcntintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__FMA__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__FMA__)
|
||
|
#include <fmaintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512F__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512F__)
|
||
|
#include <avx512fintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512VL__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512VL__)
|
||
|
#include <avx512vlintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512BW__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512BW__)
|
||
|
#include <avx512bwintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512BITALG__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512BITALG__)
|
||
|
#include <avx512bitalgintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512CD__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512CD__)
|
||
|
#include <avx512cdintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512VPOPCNTDQ__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512VPOPCNTDQ__)
|
||
|
#include <avx512vpopcntdqintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512VPOPCNTDQ__))
|
||
|
#include <avx512vpopcntdqvlintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512VNNI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512VNNI__)
|
||
|
#include <avx512vnniintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512VNNI__))
|
||
|
#include <avx512vlvnniintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVXVNNI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVXVNNI__)
|
||
|
#include <avxvnniintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512DQ__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512DQ__)
|
||
|
#include <avx512dqintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512BITALG__))
|
||
|
#include <avx512vlbitalgintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512BW__))
|
||
|
#include <avx512vlbwintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512CD__))
|
||
|
#include <avx512vlcdintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512DQ__))
|
||
|
#include <avx512vldqintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512ER__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512ER__)
|
||
|
#include <avx512erintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512IFMA__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512IFMA__)
|
||
|
#include <avx512ifmaintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512IFMA__) && defined(__AVX512VL__))
|
||
|
#include <avx512ifmavlintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVXIFMA__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVXIFMA__)
|
||
|
#include <avxifmaintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512VBMI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512VBMI__)
|
||
|
#include <avx512vbmiintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VBMI__) && defined(__AVX512VL__))
|
||
|
#include <avx512vbmivlintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512VBMI2__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512VBMI2__)
|
||
|
#include <avx512vbmi2intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VBMI2__) && defined(__AVX512VL__))
|
||
|
#include <avx512vlvbmi2intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512PF__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512PF__)
|
||
|
#include <avx512pfintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512FP16__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512FP16__)
|
||
|
#include <avx512fp16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512FP16__))
|
||
|
#include <avx512vlfp16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVX512BF16__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVX512BF16__)
|
||
|
#include <avx512bf16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512BF16__))
|
||
|
#include <avx512vlbf16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__PKU__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__PKU__)
|
||
|
#include <pkuintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__VPCLMULQDQ__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__VPCLMULQDQ__)
|
||
|
#include <vpclmulqdqintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__VAES__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__VAES__)
|
||
|
#include <vaesintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__GFNI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__GFNI__)
|
||
|
#include <gfniintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVXVNNIINT8__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVXVNNIINT8__)
|
||
|
#include <avxvnniint8intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVXNECONVERT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVXNECONVERT__)
|
||
|
#include <avxneconvertintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SHA512__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SHA512__)
|
||
|
#include <sha512intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SM3__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SM3__)
|
||
|
#include <sm3intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SM4__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SM4__)
|
||
|
#include <sm4intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AVXVNNIINT16__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AVXVNNIINT16__)
|
||
|
#include <avxvnniint16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RDPID__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RDPID__)
|
||
|
/// Reads the value of the IA32_TSC_AUX MSR (0xc0000103).
|
||
|
///
|
||
|
/// \headerfile <immintrin.h>
|
||
|
@@ -304,8 +262,7 @@ _rdpid_u32(void) {
|
||
|
}
|
||
|
#endif // __RDPID__
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RDRND__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RDRND__)
|
||
|
/// Returns a 16-bit hardware-generated random value.
|
||
|
///
|
||
|
/// \headerfile <immintrin.h>
|
||
|
@@ -367,8 +324,7 @@ _rdrand64_step(unsigned long long *__p)
|
||
|
}
|
||
|
#endif /* __RDRND__ */
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__FSGSBASE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__FSGSBASE__)
|
||
|
#ifdef __x86_64__
|
||
|
/// Reads the FS base register.
|
||
|
///
|
||
|
@@ -481,8 +437,7 @@ _writegsbase_u64(unsigned long long __V)
|
||
|
#endif
|
||
|
#endif /* __FSGSBASE__ */
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__MOVBE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__MOVBE__)
|
||
|
|
||
|
/* The structs used below are to force the load/store to be unaligned. This
|
||
|
* is accomplished with the __packed__ attribute. The __may_alias__ prevents
|
||
|
@@ -598,139 +553,118 @@ _storebe_i64(void * __P, long long __D) {
|
||
|
#endif
|
||
|
#endif /* __MOVBE */
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RTM__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RTM__)
|
||
|
#include <rtmintrin.h>
|
||
|
#include <xtestintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SHA__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SHA__)
|
||
|
#include <shaintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__FXSR__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__FXSR__)
|
||
|
#include <fxsrintrin.h>
|
||
|
#endif
|
||
|
|
||
|
/* No feature check desired due to internal MSC_VER checks */
|
||
|
#include <xsaveintrin.h>
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__XSAVEOPT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__XSAVEOPT__)
|
||
|
#include <xsaveoptintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__XSAVEC__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__XSAVEC__)
|
||
|
#include <xsavecintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__XSAVES__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__XSAVES__)
|
||
|
#include <xsavesintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SHSTK__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SHSTK__)
|
||
|
#include <cetintrin.h>
|
||
|
#endif
|
||
|
|
||
|
/* Intrinsics inside adcintrin.h are available at all times. */
|
||
|
#include <adcintrin.h>
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__ADX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__ADX__)
|
||
|
#include <adxintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RDSEED__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RDSEED__)
|
||
|
#include <rdseedintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__WBNOINVD__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__WBNOINVD__)
|
||
|
#include <wbnoinvdintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CLDEMOTE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CLDEMOTE__)
|
||
|
#include <cldemoteintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__WAITPKG__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__WAITPKG__)
|
||
|
#include <waitpkgintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__MOVDIRI__) || defined(__MOVDIR64B__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__MOVDIRI__) || \
|
||
|
+ defined(__MOVDIR64B__)
|
||
|
#include <movdirintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__PCONFIG__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__PCONFIG__)
|
||
|
#include <pconfigintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SGX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SGX__)
|
||
|
#include <sgxintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__PTWRITE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__PTWRITE__)
|
||
|
#include <ptwriteintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__INVPCID__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__INVPCID__)
|
||
|
#include <invpcidintrin.h>
|
||
|
#endif
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AMX_FP16__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AMX_FP16__)
|
||
|
#include <amxfp16intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__KL__) || defined(__WIDEKL__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__KL__) || \
|
||
|
+ defined(__WIDEKL__)
|
||
|
#include <keylockerintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AMX_TILE__) || defined(__AMX_INT8__) || defined(__AMX_BF16__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AMX_TILE__) || \
|
||
|
+ defined(__AMX_INT8__) || defined(__AMX_BF16__)
|
||
|
#include <amxintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__AMX_COMPLEX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__AMX_COMPLEX__)
|
||
|
#include <amxcomplexintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
defined(__AVX512VP2INTERSECT__)
|
||
|
#include <avx512vp2intersectintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || \
|
||
|
(defined(__AVX512VL__) && defined(__AVX512VP2INTERSECT__))
|
||
|
#include <avx512vlvp2intersectintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__ENQCMD__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__ENQCMD__)
|
||
|
#include <enqcmdintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SERIALIZE__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SERIALIZE__)
|
||
|
#include <serializeintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__TSXLDTRK__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__TSXLDTRK__)
|
||
|
#include <tsxldtrkintrin.h>
|
||
|
#endif
|
||
|
|
||
|
diff --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h
|
||
|
index a6395143db54c2..fd27955fbe002d 100644
|
||
|
--- a/clang/lib/Headers/intrin.h
|
||
|
+++ b/clang/lib/Headers/intrin.h
|
||
|
@@ -15,6 +15,8 @@
|
||
|
#ifndef __INTRIN_H
|
||
|
#define __INTRIN_H
|
||
|
|
||
|
+#include <intrin0.h>
|
||
|
+
|
||
|
/* First include the standard intrinsics. */
|
||
|
#if defined(__i386__) || defined(__x86_64__)
|
||
|
#include <x86intrin.h>
|
||
|
@@ -131,8 +133,6 @@ void __writefsqword(unsigned long, unsigned __int64);
|
||
|
void __writefsword(unsigned long, unsigned short);
|
||
|
void __writemsr(unsigned long, unsigned __int64);
|
||
|
void *_AddressOfReturnAddress(void);
|
||
|
-unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
|
||
|
-unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
|
||
|
unsigned char _bittest(long const *, long);
|
||
|
unsigned char _bittestandcomplement(long *, long);
|
||
|
unsigned char _bittestandreset(long *, long);
|
||
|
@@ -151,7 +151,6 @@ long _InterlockedExchangeAdd_HLERelease(long volatile *, long);
|
||
|
__int64 _InterlockedExchangeAdd64_HLEAcquire(__int64 volatile *, __int64);
|
||
|
__int64 _InterlockedExchangeAdd64_HLERelease(__int64 volatile *, __int64);
|
||
|
void _ReadBarrier(void);
|
||
|
-void _ReadWriteBarrier(void);
|
||
|
unsigned int _rorx_u32(unsigned int, const unsigned int);
|
||
|
int _sarx_i32(int, unsigned int);
|
||
|
#if __STDC_HOSTED__
|
||
|
@@ -182,12 +181,6 @@ unsigned char __readgsbyte(unsigned long);
|
||
|
unsigned long __readgsdword(unsigned long);
|
||
|
unsigned __int64 __readgsqword(unsigned long);
|
||
|
unsigned short __readgsword(unsigned long);
|
||
|
-unsigned __int64 __shiftleft128(unsigned __int64 _LowPart,
|
||
|
- unsigned __int64 _HighPart,
|
||
|
- unsigned char _Shift);
|
||
|
-unsigned __int64 __shiftright128(unsigned __int64 _LowPart,
|
||
|
- unsigned __int64 _HighPart,
|
||
|
- unsigned char _Shift);
|
||
|
void __stosq(unsigned __int64 *, unsigned __int64, size_t);
|
||
|
unsigned char __vmx_on(unsigned __int64 *);
|
||
|
unsigned char __vmx_vmclear(unsigned __int64 *);
|
||
|
@@ -236,212 +229,10 @@ unsigned __int64 _shlx_u64(unsigned __int64, unsigned int);
|
||
|
unsigned __int64 _shrx_u64(unsigned __int64, unsigned int);
|
||
|
__int64 __mulh(__int64, __int64);
|
||
|
unsigned __int64 __umulh(unsigned __int64, unsigned __int64);
|
||
|
-__int64 _mul128(__int64, __int64, __int64*);
|
||
|
-unsigned __int64 _umul128(unsigned __int64,
|
||
|
- unsigned __int64,
|
||
|
- unsigned __int64*);
|
||
|
+__int64 _mul128(__int64, __int64, __int64 *);
|
||
|
|
||
|
#endif /* __x86_64__ */
|
||
|
|
||
|
-#if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
||
|
-
|
||
|
-unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
|
||
|
-unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
|
||
|
-
|
||
|
-#endif
|
||
|
-
|
||
|
-#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
||
|
-__int64 _InterlockedDecrement64(__int64 volatile *_Addend);
|
||
|
-__int64 _InterlockedExchange64(__int64 volatile *_Target, __int64 _Value);
|
||
|
-__int64 _InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value);
|
||
|
-__int64 _InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value);
|
||
|
-__int64 _InterlockedIncrement64(__int64 volatile *_Addend);
|
||
|
-__int64 _InterlockedOr64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedXor64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-
|
||
|
-#endif
|
||
|
-
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Exchange Add
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedExchangeAdd8_acq(char volatile *_Addend, char _Value);
|
||
|
-char _InterlockedExchangeAdd8_nf(char volatile *_Addend, char _Value);
|
||
|
-char _InterlockedExchangeAdd8_rel(char volatile *_Addend, char _Value);
|
||
|
-short _InterlockedExchangeAdd16_acq(short volatile *_Addend, short _Value);
|
||
|
-short _InterlockedExchangeAdd16_nf(short volatile *_Addend, short _Value);
|
||
|
-short _InterlockedExchangeAdd16_rel(short volatile *_Addend, short _Value);
|
||
|
-long _InterlockedExchangeAdd_acq(long volatile *_Addend, long _Value);
|
||
|
-long _InterlockedExchangeAdd_nf(long volatile *_Addend, long _Value);
|
||
|
-long _InterlockedExchangeAdd_rel(long volatile *_Addend, long _Value);
|
||
|
-__int64 _InterlockedExchangeAdd64_acq(__int64 volatile *_Addend, __int64 _Value);
|
||
|
-__int64 _InterlockedExchangeAdd64_nf(__int64 volatile *_Addend, __int64 _Value);
|
||
|
-__int64 _InterlockedExchangeAdd64_rel(__int64 volatile *_Addend, __int64 _Value);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Increment
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-short _InterlockedIncrement16_acq(short volatile *_Value);
|
||
|
-short _InterlockedIncrement16_nf(short volatile *_Value);
|
||
|
-short _InterlockedIncrement16_rel(short volatile *_Value);
|
||
|
-long _InterlockedIncrement_acq(long volatile *_Value);
|
||
|
-long _InterlockedIncrement_nf(long volatile *_Value);
|
||
|
-long _InterlockedIncrement_rel(long volatile *_Value);
|
||
|
-__int64 _InterlockedIncrement64_acq(__int64 volatile *_Value);
|
||
|
-__int64 _InterlockedIncrement64_nf(__int64 volatile *_Value);
|
||
|
-__int64 _InterlockedIncrement64_rel(__int64 volatile *_Value);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Decrement
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-short _InterlockedDecrement16_acq(short volatile *_Value);
|
||
|
-short _InterlockedDecrement16_nf(short volatile *_Value);
|
||
|
-short _InterlockedDecrement16_rel(short volatile *_Value);
|
||
|
-long _InterlockedDecrement_acq(long volatile *_Value);
|
||
|
-long _InterlockedDecrement_nf(long volatile *_Value);
|
||
|
-long _InterlockedDecrement_rel(long volatile *_Value);
|
||
|
-__int64 _InterlockedDecrement64_acq(__int64 volatile *_Value);
|
||
|
-__int64 _InterlockedDecrement64_nf(__int64 volatile *_Value);
|
||
|
-__int64 _InterlockedDecrement64_rel(__int64 volatile *_Value);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked And
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedAnd8_acq(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedAnd8_nf(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedAnd8_rel(char volatile *_Value, char _Mask);
|
||
|
-short _InterlockedAnd16_acq(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedAnd16_nf(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedAnd16_rel(short volatile *_Value, short _Mask);
|
||
|
-long _InterlockedAnd_acq(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedAnd_nf(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedAnd_rel(long volatile *_Value, long _Mask);
|
||
|
-__int64 _InterlockedAnd64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedAnd64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedAnd64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Bit Counting and Testing
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-unsigned char _interlockedbittestandset_acq(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-unsigned char _interlockedbittestandset_nf(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-unsigned char _interlockedbittestandset_rel(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-unsigned char _interlockedbittestandreset_acq(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-unsigned char _interlockedbittestandreset_nf(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-unsigned char _interlockedbittestandreset_rel(long volatile *_BitBase,
|
||
|
- long _BitPos);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Or
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedOr8_acq(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedOr8_nf(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedOr8_rel(char volatile *_Value, char _Mask);
|
||
|
-short _InterlockedOr16_acq(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedOr16_nf(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedOr16_rel(short volatile *_Value, short _Mask);
|
||
|
-long _InterlockedOr_acq(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedOr_nf(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedOr_rel(long volatile *_Value, long _Mask);
|
||
|
-__int64 _InterlockedOr64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedOr64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedOr64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Xor
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedXor8_acq(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedXor8_nf(char volatile *_Value, char _Mask);
|
||
|
-char _InterlockedXor8_rel(char volatile *_Value, char _Mask);
|
||
|
-short _InterlockedXor16_acq(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedXor16_nf(short volatile *_Value, short _Mask);
|
||
|
-short _InterlockedXor16_rel(short volatile *_Value, short _Mask);
|
||
|
-long _InterlockedXor_acq(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedXor_nf(long volatile *_Value, long _Mask);
|
||
|
-long _InterlockedXor_rel(long volatile *_Value, long _Mask);
|
||
|
-__int64 _InterlockedXor64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedXor64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-__int64 _InterlockedXor64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Exchange
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedExchange8_acq(char volatile *_Target, char _Value);
|
||
|
-char _InterlockedExchange8_nf(char volatile *_Target, char _Value);
|
||
|
-char _InterlockedExchange8_rel(char volatile *_Target, char _Value);
|
||
|
-short _InterlockedExchange16_acq(short volatile *_Target, short _Value);
|
||
|
-short _InterlockedExchange16_nf(short volatile *_Target, short _Value);
|
||
|
-short _InterlockedExchange16_rel(short volatile *_Target, short _Value);
|
||
|
-long _InterlockedExchange_acq(long volatile *_Target, long _Value);
|
||
|
-long _InterlockedExchange_nf(long volatile *_Target, long _Value);
|
||
|
-long _InterlockedExchange_rel(long volatile *_Target, long _Value);
|
||
|
-__int64 _InterlockedExchange64_acq(__int64 volatile *_Target, __int64 _Value);
|
||
|
-__int64 _InterlockedExchange64_nf(__int64 volatile *_Target, __int64 _Value);
|
||
|
-__int64 _InterlockedExchange64_rel(__int64 volatile *_Target, __int64 _Value);
|
||
|
-#endif
|
||
|
-/*----------------------------------------------------------------------------*\
|
||
|
-|* Interlocked Compare Exchange
|
||
|
-\*----------------------------------------------------------------------------*/
|
||
|
-#if defined(__arm__) || defined(__aarch64__)
|
||
|
-char _InterlockedCompareExchange8_acq(char volatile *_Destination,
|
||
|
- char _Exchange, char _Comparand);
|
||
|
-char _InterlockedCompareExchange8_nf(char volatile *_Destination,
|
||
|
- char _Exchange, char _Comparand);
|
||
|
-char _InterlockedCompareExchange8_rel(char volatile *_Destination,
|
||
|
- char _Exchange, char _Comparand);
|
||
|
-short _InterlockedCompareExchange16_acq(short volatile *_Destination,
|
||
|
- short _Exchange, short _Comparand);
|
||
|
-short _InterlockedCompareExchange16_nf(short volatile *_Destination,
|
||
|
- short _Exchange, short _Comparand);
|
||
|
-short _InterlockedCompareExchange16_rel(short volatile *_Destination,
|
||
|
- short _Exchange, short _Comparand);
|
||
|
-long _InterlockedCompareExchange_acq(long volatile *_Destination,
|
||
|
- long _Exchange, long _Comparand);
|
||
|
-long _InterlockedCompareExchange_nf(long volatile *_Destination,
|
||
|
- long _Exchange, long _Comparand);
|
||
|
-long _InterlockedCompareExchange_rel(long volatile *_Destination,
|
||
|
- long _Exchange, long _Comparand);
|
||
|
-__int64 _InterlockedCompareExchange64_acq(__int64 volatile *_Destination,
|
||
|
- __int64 _Exchange, __int64 _Comparand);
|
||
|
-__int64 _InterlockedCompareExchange64_nf(__int64 volatile *_Destination,
|
||
|
- __int64 _Exchange, __int64 _Comparand);
|
||
|
-__int64 _InterlockedCompareExchange64_rel(__int64 volatile *_Destination,
|
||
|
- __int64 _Exchange, __int64 _Comparand);
|
||
|
-#endif
|
||
|
-#if defined(__x86_64__) || defined(__aarch64__)
|
||
|
-unsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination,
|
||
|
- __int64 _ExchangeHigh,
|
||
|
- __int64 _ExchangeLow,
|
||
|
- __int64 *_ComparandResult);
|
||
|
-#endif
|
||
|
-#if defined(__aarch64__)
|
||
|
-unsigned char _InterlockedCompareExchange128_acq(__int64 volatile *_Destination,
|
||
|
- __int64 _ExchangeHigh,
|
||
|
- __int64 _ExchangeLow,
|
||
|
- __int64 *_ComparandResult);
|
||
|
-unsigned char _InterlockedCompareExchange128_nf(__int64 volatile *_Destination,
|
||
|
- __int64 _ExchangeHigh,
|
||
|
- __int64 _ExchangeLow,
|
||
|
- __int64 *_ComparandResult);
|
||
|
-unsigned char _InterlockedCompareExchange128_rel(__int64 volatile *_Destination,
|
||
|
- __int64 _ExchangeHigh,
|
||
|
- __int64 _ExchangeLow,
|
||
|
- __int64 *_ComparandResult);
|
||
|
-#endif
|
||
|
-
|
||
|
/*----------------------------------------------------------------------------*\
|
||
|
|* movs, stos
|
||
|
\*----------------------------------------------------------------------------*/
|
||
|
@@ -583,8 +374,6 @@ unsigned int _CountLeadingOnes(unsigned long);
|
||
|
unsigned int _CountLeadingOnes64(unsigned __int64);
|
||
|
unsigned int _CountLeadingSigns(long);
|
||
|
unsigned int _CountLeadingSigns64(__int64);
|
||
|
-unsigned int _CountLeadingZeros(unsigned long);
|
||
|
-unsigned int _CountLeadingZeros64(unsigned _int64);
|
||
|
unsigned int _CountOneBits(unsigned long);
|
||
|
unsigned int _CountOneBits64(unsigned __int64);
|
||
|
|
||
|
diff --git a/clang/lib/Headers/intrin0.h b/clang/lib/Headers/intrin0.h
|
||
|
new file mode 100644
|
||
|
index 00000000000000..31f362ec84d5c5
|
||
|
--- /dev/null
|
||
|
+++ b/clang/lib/Headers/intrin0.h
|
||
|
@@ -0,0 +1,247 @@
|
||
|
+/* ===-------- intrin.h ---------------------------------------------------===
|
||
|
+ *
|
||
|
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
+ * See https://llvm.org/LICENSE.txt for license information.
|
||
|
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
+ *
|
||
|
+ *===-----------------------------------------------------------------------===
|
||
|
+ */
|
||
|
+
|
||
|
+/* Only include this if we're compiling for the windows platform. */
|
||
|
+#ifndef _MSC_VER
|
||
|
+#include_next <intrin0.h>
|
||
|
+#else
|
||
|
+
|
||
|
+#ifndef __INTRIN0_H
|
||
|
+#define __INTRIN0_H
|
||
|
+
|
||
|
+#ifdef __x86_64__
|
||
|
+#include <adcintrin.h>
|
||
|
+#endif
|
||
|
+
|
||
|
+#ifdef __cplusplus
|
||
|
+extern "C" {
|
||
|
+#endif
|
||
|
+
|
||
|
+unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
|
||
|
+unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
|
||
|
+void _ReadWriteBarrier(void);
|
||
|
+
|
||
|
+#if defined(__aarch64__)
|
||
|
+unsigned int _CountLeadingZeros(unsigned long);
|
||
|
+unsigned int _CountLeadingZeros64(unsigned _int64);
|
||
|
+unsigned char _InterlockedCompareExchange128_acq(__int64 volatile *_Destination,
|
||
|
+ __int64 _ExchangeHigh,
|
||
|
+ __int64 _ExchangeLow,
|
||
|
+ __int64 *_ComparandResult);
|
||
|
+unsigned char _InterlockedCompareExchange128_nf(__int64 volatile *_Destination,
|
||
|
+ __int64 _ExchangeHigh,
|
||
|
+ __int64 _ExchangeLow,
|
||
|
+ __int64 *_ComparandResult);
|
||
|
+unsigned char _InterlockedCompareExchange128_rel(__int64 volatile *_Destination,
|
||
|
+ __int64 _ExchangeHigh,
|
||
|
+ __int64 _ExchangeLow,
|
||
|
+ __int64 *_ComparandResult);
|
||
|
+#endif
|
||
|
+
|
||
|
+#ifdef __x86_64__
|
||
|
+unsigned __int64 _umul128(unsigned __int64, unsigned __int64,
|
||
|
+ unsigned __int64 *);
|
||
|
+unsigned __int64 __shiftleft128(unsigned __int64 _LowPart,
|
||
|
+ unsigned __int64 _HighPart,
|
||
|
+ unsigned char _Shift);
|
||
|
+unsigned __int64 __shiftright128(unsigned __int64 _LowPart,
|
||
|
+ unsigned __int64 _HighPart,
|
||
|
+ unsigned char _Shift);
|
||
|
+#endif
|
||
|
+
|
||
|
+#if defined(__x86_64__) || defined(__i386__)
|
||
|
+void _mm_pause(void);
|
||
|
+#endif
|
||
|
+
|
||
|
+#if defined(__x86_64__) || defined(__aarch64__)
|
||
|
+unsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination,
|
||
|
+ __int64 _ExchangeHigh,
|
||
|
+ __int64 _ExchangeLow,
|
||
|
+ __int64 *_ComparandResult);
|
||
|
+#endif
|
||
|
+
|
||
|
+#if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
||
|
+unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
|
||
|
+unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
|
||
|
+#endif
|
||
|
+
|
||
|
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
|
||
|
+ defined(__aarch64__)
|
||
|
+__int64 _InterlockedDecrement64(__int64 volatile *_Addend);
|
||
|
+__int64 _InterlockedExchange64(__int64 volatile *_Target, __int64 _Value);
|
||
|
+__int64 _InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value);
|
||
|
+__int64 _InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value);
|
||
|
+__int64 _InterlockedIncrement64(__int64 volatile *_Addend);
|
||
|
+__int64 _InterlockedOr64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedXor64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+#endif
|
||
|
+
|
||
|
+#if defined(__arm__) || defined(__aarch64__)
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Exchange Add
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedExchangeAdd8_acq(char volatile *_Addend, char _Value);
|
||
|
+char _InterlockedExchangeAdd8_nf(char volatile *_Addend, char _Value);
|
||
|
+char _InterlockedExchangeAdd8_rel(char volatile *_Addend, char _Value);
|
||
|
+short _InterlockedExchangeAdd16_acq(short volatile *_Addend, short _Value);
|
||
|
+short _InterlockedExchangeAdd16_nf(short volatile *_Addend, short _Value);
|
||
|
+short _InterlockedExchangeAdd16_rel(short volatile *_Addend, short _Value);
|
||
|
+long _InterlockedExchangeAdd_acq(long volatile *_Addend, long _Value);
|
||
|
+long _InterlockedExchangeAdd_nf(long volatile *_Addend, long _Value);
|
||
|
+long _InterlockedExchangeAdd_rel(long volatile *_Addend, long _Value);
|
||
|
+__int64 _InterlockedExchangeAdd64_acq(__int64 volatile *_Addend,
|
||
|
+ __int64 _Value);
|
||
|
+__int64 _InterlockedExchangeAdd64_nf(__int64 volatile *_Addend, __int64 _Value);
|
||
|
+__int64 _InterlockedExchangeAdd64_rel(__int64 volatile *_Addend,
|
||
|
+ __int64 _Value);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Increment
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+short _InterlockedIncrement16_acq(short volatile *_Value);
|
||
|
+short _InterlockedIncrement16_nf(short volatile *_Value);
|
||
|
+short _InterlockedIncrement16_rel(short volatile *_Value);
|
||
|
+long _InterlockedIncrement_acq(long volatile *_Value);
|
||
|
+long _InterlockedIncrement_nf(long volatile *_Value);
|
||
|
+long _InterlockedIncrement_rel(long volatile *_Value);
|
||
|
+__int64 _InterlockedIncrement64_acq(__int64 volatile *_Value);
|
||
|
+__int64 _InterlockedIncrement64_nf(__int64 volatile *_Value);
|
||
|
+__int64 _InterlockedIncrement64_rel(__int64 volatile *_Value);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Decrement
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+short _InterlockedDecrement16_acq(short volatile *_Value);
|
||
|
+short _InterlockedDecrement16_nf(short volatile *_Value);
|
||
|
+short _InterlockedDecrement16_rel(short volatile *_Value);
|
||
|
+long _InterlockedDecrement_acq(long volatile *_Value);
|
||
|
+long _InterlockedDecrement_nf(long volatile *_Value);
|
||
|
+long _InterlockedDecrement_rel(long volatile *_Value);
|
||
|
+__int64 _InterlockedDecrement64_acq(__int64 volatile *_Value);
|
||
|
+__int64 _InterlockedDecrement64_nf(__int64 volatile *_Value);
|
||
|
+__int64 _InterlockedDecrement64_rel(__int64 volatile *_Value);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked And
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedAnd8_acq(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedAnd8_nf(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedAnd8_rel(char volatile *_Value, char _Mask);
|
||
|
+short _InterlockedAnd16_acq(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedAnd16_nf(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedAnd16_rel(short volatile *_Value, short _Mask);
|
||
|
+long _InterlockedAnd_acq(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedAnd_nf(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedAnd_rel(long volatile *_Value, long _Mask);
|
||
|
+__int64 _InterlockedAnd64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedAnd64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedAnd64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Bit Counting and Testing
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+unsigned char _interlockedbittestandset_acq(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+unsigned char _interlockedbittestandset_nf(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+unsigned char _interlockedbittestandset_rel(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+unsigned char _interlockedbittestandreset_acq(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+unsigned char _interlockedbittestandreset_nf(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+unsigned char _interlockedbittestandreset_rel(long volatile *_BitBase,
|
||
|
+ long _BitPos);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Or
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedOr8_acq(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedOr8_nf(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedOr8_rel(char volatile *_Value, char _Mask);
|
||
|
+short _InterlockedOr16_acq(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedOr16_nf(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedOr16_rel(short volatile *_Value, short _Mask);
|
||
|
+long _InterlockedOr_acq(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedOr_nf(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedOr_rel(long volatile *_Value, long _Mask);
|
||
|
+__int64 _InterlockedOr64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedOr64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedOr64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Xor
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedXor8_acq(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedXor8_nf(char volatile *_Value, char _Mask);
|
||
|
+char _InterlockedXor8_rel(char volatile *_Value, char _Mask);
|
||
|
+short _InterlockedXor16_acq(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedXor16_nf(short volatile *_Value, short _Mask);
|
||
|
+short _InterlockedXor16_rel(short volatile *_Value, short _Mask);
|
||
|
+long _InterlockedXor_acq(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedXor_nf(long volatile *_Value, long _Mask);
|
||
|
+long _InterlockedXor_rel(long volatile *_Value, long _Mask);
|
||
|
+__int64 _InterlockedXor64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedXor64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+__int64 _InterlockedXor64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Exchange
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedExchange8_acq(char volatile *_Target, char _Value);
|
||
|
+char _InterlockedExchange8_nf(char volatile *_Target, char _Value);
|
||
|
+char _InterlockedExchange8_rel(char volatile *_Target, char _Value);
|
||
|
+short _InterlockedExchange16_acq(short volatile *_Target, short _Value);
|
||
|
+short _InterlockedExchange16_nf(short volatile *_Target, short _Value);
|
||
|
+short _InterlockedExchange16_rel(short volatile *_Target, short _Value);
|
||
|
+long _InterlockedExchange_acq(long volatile *_Target, long _Value);
|
||
|
+long _InterlockedExchange_nf(long volatile *_Target, long _Value);
|
||
|
+long _InterlockedExchange_rel(long volatile *_Target, long _Value);
|
||
|
+__int64 _InterlockedExchange64_acq(__int64 volatile *_Target, __int64 _Value);
|
||
|
+__int64 _InterlockedExchange64_nf(__int64 volatile *_Target, __int64 _Value);
|
||
|
+__int64 _InterlockedExchange64_rel(__int64 volatile *_Target, __int64 _Value);
|
||
|
+
|
||
|
+/*----------------------------------------------------------------------------*\
|
||
|
+|* Interlocked Compare Exchange
|
||
|
+\*----------------------------------------------------------------------------*/
|
||
|
+char _InterlockedCompareExchange8_acq(char volatile *_Destination,
|
||
|
+ char _Exchange, char _Comparand);
|
||
|
+char _InterlockedCompareExchange8_nf(char volatile *_Destination,
|
||
|
+ char _Exchange, char _Comparand);
|
||
|
+char _InterlockedCompareExchange8_rel(char volatile *_Destination,
|
||
|
+ char _Exchange, char _Comparand);
|
||
|
+short _InterlockedCompareExchange16_acq(short volatile *_Destination,
|
||
|
+ short _Exchange, short _Comparand);
|
||
|
+short _InterlockedCompareExchange16_nf(short volatile *_Destination,
|
||
|
+ short _Exchange, short _Comparand);
|
||
|
+short _InterlockedCompareExchange16_rel(short volatile *_Destination,
|
||
|
+ short _Exchange, short _Comparand);
|
||
|
+long _InterlockedCompareExchange_acq(long volatile *_Destination,
|
||
|
+ long _Exchange, long _Comparand);
|
||
|
+long _InterlockedCompareExchange_nf(long volatile *_Destination, long _Exchange,
|
||
|
+ long _Comparand);
|
||
|
+long _InterlockedCompareExchange_rel(long volatile *_Destination,
|
||
|
+ long _Exchange, long _Comparand);
|
||
|
+__int64 _InterlockedCompareExchange64_acq(__int64 volatile *_Destination,
|
||
|
+ __int64 _Exchange,
|
||
|
+ __int64 _Comparand);
|
||
|
+__int64 _InterlockedCompareExchange64_nf(__int64 volatile *_Destination,
|
||
|
+ __int64 _Exchange, __int64 _Comparand);
|
||
|
+__int64 _InterlockedCompareExchange64_rel(__int64 volatile *_Destination,
|
||
|
+ __int64 _Exchange,
|
||
|
+ __int64 _Comparand);
|
||
|
+#endif
|
||
|
+
|
||
|
+#ifdef __cplusplus
|
||
|
+}
|
||
|
+#endif
|
||
|
+
|
||
|
+#endif /* __INTRIN0_H */
|
||
|
+#endif /* _MSC_VER */
|
||
|
diff --git a/clang/lib/Headers/keylockerintrin.h b/clang/lib/Headers/keylockerintrin.h
|
||
|
index 1994ac42070ad3..f76e91b4d4b306 100644
|
||
|
--- a/clang/lib/Headers/keylockerintrin.h
|
||
|
+++ b/clang/lib/Headers/keylockerintrin.h
|
||
|
@@ -28,8 +28,7 @@
|
||
|
#ifndef _KEYLOCKERINTRIN_H
|
||
|
#define _KEYLOCKERINTRIN_H
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__KL__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__KL__)
|
||
|
|
||
|
/* Define the default attributes for the functions in this file. */
|
||
|
#define __DEFAULT_FN_ATTRS \
|
||
|
@@ -327,11 +326,9 @@ _mm_aesdec256kl_u8(__m128i* __odata, __m128i __idata, const void *__h) {
|
||
|
|
||
|
#undef __DEFAULT_FN_ATTRS
|
||
|
|
||
|
-#endif /* !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) \
|
||
|
- || defined(__KL__) */
|
||
|
+#endif /* !defined(__SCE__ || __has_feature(modules) || defined(__KL__) */
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__WIDEKL__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__WIDEKL__)
|
||
|
|
||
|
/* Define the default attributes for the functions in this file. */
|
||
|
#define __DEFAULT_FN_ATTRS \
|
||
|
@@ -524,7 +521,7 @@ _mm_aesdecwide256kl_u8(__m128i __odata[8], const __m128i __idata[8], const void*
|
||
|
|
||
|
#undef __DEFAULT_FN_ATTRS
|
||
|
|
||
|
-#endif /* !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) \
|
||
|
- || defined(__WIDEKL__) */
|
||
|
+#endif /* !defined(__SCE__) || __has_feature(modules) || defined(__WIDEKL__) \
|
||
|
+ */
|
||
|
|
||
|
#endif /* _KEYLOCKERINTRIN_H */
|
||
|
diff --git a/clang/lib/Headers/x86gprintrin.h b/clang/lib/Headers/x86gprintrin.h
|
||
|
index ed141879fbc744..3d5cc606d7e63d 100644
|
||
|
--- a/clang/lib/Headers/x86gprintrin.h
|
||
|
+++ b/clang/lib/Headers/x86gprintrin.h
|
||
|
@@ -10,38 +10,31 @@
|
||
|
#ifndef __X86GPRINTRIN_H
|
||
|
#define __X86GPRINTRIN_H
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__HRESET__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__HRESET__)
|
||
|
#include <hresetintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__UINTR__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__UINTR__)
|
||
|
#include <uintrintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__USERMSR__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__USERMSR__)
|
||
|
#include <usermsrintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CRC32__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CRC32__)
|
||
|
#include <crc32intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__PRFCHI__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__PRFCHI__)
|
||
|
#include <prfchiintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RAOINT__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RAOINT__)
|
||
|
#include <raointintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CMPCCXADD__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CMPCCXADD__)
|
||
|
#include <cmpccxaddintrin.h>
|
||
|
#endif
|
||
|
|
||
|
diff --git a/clang/lib/Headers/x86intrin.h b/clang/lib/Headers/x86intrin.h
|
||
|
index 450fd008dab95b..c20bfbb8fe46e2 100644
|
||
|
--- a/clang/lib/Headers/x86intrin.h
|
||
|
+++ b/clang/lib/Headers/x86intrin.h
|
||
|
@@ -14,53 +14,43 @@
|
||
|
|
||
|
#include <immintrin.h>
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__3dNOW__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__3dNOW__)
|
||
|
#include <mm3dnow.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__PRFCHW__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__PRFCHW__)
|
||
|
#include <prfchwintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__SSE4A__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__SSE4A__)
|
||
|
#include <ammintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__FMA4__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__FMA4__)
|
||
|
#include <fma4intrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__XOP__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__XOP__)
|
||
|
#include <xopintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__TBM__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__TBM__)
|
||
|
#include <tbmintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__LWP__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__LWP__)
|
||
|
#include <lwpintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__MWAITX__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__MWAITX__)
|
||
|
#include <mwaitxintrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__CLZERO__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__CLZERO__)
|
||
|
#include <clzerointrin.h>
|
||
|
#endif
|
||
|
|
||
|
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||
|
- defined(__RDPRU__)
|
||
|
+#if !defined(__SCE__) || __has_feature(modules) || defined(__RDPRU__)
|
||
|
#include <rdpruintrin.h>
|
||
|
#endif
|
||
|
|
||
|
diff --git a/clang/lib/Headers/yvals_core.h b/clang/lib/Headers/yvals_core.h
|
||
|
new file mode 100644
|
||
|
index 00000000000000..5ee194a3e5f5f6
|
||
|
--- /dev/null
|
||
|
+++ b/clang/lib/Headers/yvals_core.h
|
||
|
@@ -0,0 +1,25 @@
|
||
|
+//===----- yvals_core.h - Internal MSVC STL core header -------------------===//
|
||
|
+//
|
||
|
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
+// See https://llvm.org/LICENSE.txt for license information.
|
||
|
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
+//
|
||
|
+//===----------------------------------------------------------------------===//
|
||
|
+
|
||
|
+// Only include this if we are aiming for MSVC compatibility.
|
||
|
+#ifndef _MSC_VER
|
||
|
+#include_next <yvals_core.h>
|
||
|
+#else
|
||
|
+
|
||
|
+#ifndef __clang_yvals_core_h
|
||
|
+#define __clang_yvals_core_h
|
||
|
+
|
||
|
+#include_next <yvals_core.h>
|
||
|
+
|
||
|
+#ifdef _STL_INTRIN_HEADER
|
||
|
+#undef _STL_INTRIN_HEADER
|
||
|
+#define _STL_INTRIN_HEADER <intrin0.h>
|
||
|
+#endif
|
||
|
+
|
||
|
+#endif
|
||
|
+#endif
|