summaryrefslogtreecommitdiffstats
path: root/config.tests
diff options
context:
space:
mode:
Diffstat (limited to 'config.tests')
-rw-r--r--config.tests/arch/CMakeLists.txt3
-rw-r--r--config.tests/arch/arch.cpp8
-rw-r--r--config.tests/binary_for_strip/CMakeLists.txt3
-rw-r--r--config.tests/binary_for_strip/lib1.cpp2
-rw-r--r--config.tests/cmake_zstd/check_zstd.cmake3
-rw-r--r--config.tests/direct_extern_access/CMakeLists.txt9
-rw-r--r--config.tests/no_direct_extern_access/CMakeLists.txt14
-rw-r--r--config.tests/no_direct_extern_access/lib.cpp (renamed from config.tests/direct_extern_access/lib.cpp)3
-rw-r--r--config.tests/no_direct_extern_access/lib.h (renamed from config.tests/direct_extern_access/lib.h)3
-rw-r--r--config.tests/no_direct_extern_access/main.cpp20
-rw-r--r--config.tests/no_direct_extern_access/other.cpp (renamed from config.tests/direct_extern_access/main.cpp)8
-rw-r--r--config.tests/precompile_header/CMakeLists.txt3
-rw-r--r--config.tests/precompile_header/header.h2
-rw-r--r--config.tests/precompile_header/main.cpp2
-rw-r--r--config.tests/separate_debug_info/CMakeLists.txt4
-rw-r--r--config.tests/static_link_order/CMakeLists.txt3
-rw-r--r--config.tests/static_link_order/main.cpp2
-rw-r--r--config.tests/static_link_order/objlib.cpp2
-rw-r--r--config.tests/static_link_order/staticlib1.cpp2
-rw-r--r--config.tests/static_link_order/staticlib2.cpp2
-rw-r--r--config.tests/x86_simd/CMakeLists.txt3
-rw-r--r--config.tests/x86_simd/main.cpp218
-rw-r--r--config.tests/x86intrin/CMakeLists.txt12
-rw-r--r--config.tests/x86intrin/main.cpp48
24 files changed, 133 insertions, 246 deletions
diff --git a/config.tests/arch/CMakeLists.txt b/config.tests/arch/CMakeLists.txt
index 9ef6e37b3b..b2517039df 100644
--- a/config.tests/arch/CMakeLists.txt
+++ b/config.tests/arch/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(arch LANGUAGES CXX)
diff --git a/config.tests/arch/arch.cpp b/config.tests/arch/arch.cpp
index dfef878426..44ec721432 100644
--- a/config.tests/arch/arch.cpp
+++ b/config.tests/arch/arch.cpp
@@ -1,6 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// Copyright (C) 2016 Intel Corporation.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: BSD-3-Clause
#define QGLOBAL_H
#include "../../src/corelib/global/archdetect.cpp"
@@ -141,7 +141,7 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
// Leading-Zero bit count, Intel Core 4th Generation ("Haswell")
" lzcnt"
#endif
-#ifdef __MMX__
+#if defined(__MMX__) && defined(__i386__)
// Multimedia Extensions, Pentium MMX, AMD K6-2
" mmx"
#endif
@@ -198,11 +198,11 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
// Shadow stack, Intel processor TBA
" shstk"
#endif
-#if defined(__SSE__) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1) || defined(_M_X64)
+#if (defined(__SSE__) && defined(__i386__)) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1 && defined(_M_IX86))
// Streaming SIMD Extensions, Intel Pentium III, AMD Athlon
" sse"
#endif
-#if defined(__SSE2__) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2) || defined(_M_X64)
+#if (defined(__SSE2__) && defined(__i386__)) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2 && defined(_M_IX86))
// SSE2, Intel Pentium-M, Intel Pentium 4, AMD Opteron and Athlon 64
" sse2"
#endif
diff --git a/config.tests/binary_for_strip/CMakeLists.txt b/config.tests/binary_for_strip/CMakeLists.txt
index 4e22af01a2..2395dfad47 100644
--- a/config.tests/binary_for_strip/CMakeLists.txt
+++ b/config.tests/binary_for_strip/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(proj LANGUAGES CXX)
add_library(lib1 SHARED lib1.cpp)
diff --git a/config.tests/binary_for_strip/lib1.cpp b/config.tests/binary_for_strip/lib1.cpp
index bb57c4da77..d2b7847557 100644
--- a/config.tests/binary_for_strip/lib1.cpp
+++ b/config.tests/binary_for_strip/lib1.cpp
@@ -1,4 +1,4 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: BSD-3-Clause
int libfunc() { return 0; }
diff --git a/config.tests/cmake_zstd/check_zstd.cmake b/config.tests/cmake_zstd/check_zstd.cmake
index 267494f90b..6ab5f15f29 100644
--- a/config.tests/cmake_zstd/check_zstd.cmake
+++ b/config.tests/cmake_zstd/check_zstd.cmake
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
file(ARCHIVE_CREATE
OUTPUT cmake_zstd.zstd
PATHS "${CMAKE_CURRENT_LIST_FILE}"
diff --git a/config.tests/direct_extern_access/CMakeLists.txt b/config.tests/direct_extern_access/CMakeLists.txt
deleted file mode 100644
index 50a35f1d02..0000000000
--- a/config.tests/direct_extern_access/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cmake_minimum_required(VERSION 3.16)
-project(direct_extern_access LANGUAGES CXX)
-
-# this is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087
-
-add_library(no_extern_access_lib SHARED lib.cpp)
-add_executable(no_extern_access_main main.cpp)
-target_compile_options(no_extern_access_lib PUBLIC "-mno-direct-extern-access")
-target_link_libraries(no_extern_access_main no_extern_access_lib)
diff --git a/config.tests/no_direct_extern_access/CMakeLists.txt b/config.tests/no_direct_extern_access/CMakeLists.txt
new file mode 100644
index 0000000000..b4b881f1dc
--- /dev/null
+++ b/config.tests/no_direct_extern_access/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.16)
+project(direct_extern_access LANGUAGES CXX)
+
+# this is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087
+# and https://sourceware.org/bugzilla/show_bug.cgi?id=29377
+
+add_library(no_extern_access_lib SHARED lib.cpp)
+add_executable(no_extern_access_main other.cpp main.cpp)
+
+target_compile_options(no_extern_access_lib PRIVATE "-Werror")
+target_compile_options(no_extern_access_lib PUBLIC "$<$<CXX_COMPILER_ID:GNU>:-mno-direct-extern-access>")
+target_compile_options(no_extern_access_lib PUBLIC "$<$<CXX_COMPILER_ID:Clang>:-fno-direct-access-external-data>")
+
+target_link_libraries(no_extern_access_main no_extern_access_lib)
diff --git a/config.tests/direct_extern_access/lib.cpp b/config.tests/no_direct_extern_access/lib.cpp
index 6cbc85571f..cf3b18bb38 100644
--- a/config.tests/direct_extern_access/lib.cpp
+++ b/config.tests/no_direct_extern_access/lib.cpp
@@ -6,5 +6,6 @@
#define BUILD
#include "lib.h"
+void *S::ptr = nullptr;
S::~S() { }
-void S::f() { }
+void *S::f() { return ptr; }
diff --git a/config.tests/direct_extern_access/lib.h b/config.tests/no_direct_extern_access/lib.h
index d35b52f135..1a9c3c5533 100644
--- a/config.tests/direct_extern_access/lib.h
+++ b/config.tests/no_direct_extern_access/lib.h
@@ -12,5 +12,6 @@
struct LIB_API S
{
virtual ~S();
- virtual void f();
+ virtual void *f();
+ static void *ptr;
};
diff --git a/config.tests/no_direct_extern_access/main.cpp b/config.tests/no_direct_extern_access/main.cpp
new file mode 100644
index 0000000000..541c8b4b33
--- /dev/null
+++ b/config.tests/no_direct_extern_access/main.cpp
@@ -0,0 +1,20 @@
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: MIT
+
+// This is combining the tests found in:
+// https://sourceware.org/bugzilla/show_bug.cgi?id=29087
+// https://sourceware.org/bugzilla/show_bug.cgi?id=29377
+
+#include "lib.h"
+
+extern void foo(); // other.cpp
+void (*get_foo())()
+{
+ return foo;
+}
+
+struct Local : S { };
+int main()
+{
+ Local l;
+}
diff --git a/config.tests/direct_extern_access/main.cpp b/config.tests/no_direct_extern_access/other.cpp
index 9cf0323766..ff12b10930 100644
--- a/config.tests/direct_extern_access/main.cpp
+++ b/config.tests/no_direct_extern_access/other.cpp
@@ -1,12 +1,8 @@
// Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT
-// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087
+// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29377
-#include "lib.h"
-
-struct Local : S { };
-int main()
+__attribute__((visibility("protected"))) void foo()
{
- Local l;
}
diff --git a/config.tests/precompile_header/CMakeLists.txt b/config.tests/precompile_header/CMakeLists.txt
index 3009eafd19..d64887594a 100644
--- a/config.tests/precompile_header/CMakeLists.txt
+++ b/config.tests/precompile_header/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(precompile_header LANGUAGES CXX)
diff --git a/config.tests/precompile_header/header.h b/config.tests/precompile_header/header.h
index 4288ee2731..0e35f8cb85 100644
--- a/config.tests/precompile_header/header.h
+++ b/config.tests/precompile_header/header.h
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: BSD-3-Clause
#ifndef HEADER_H
#define HEADER_H
diff --git a/config.tests/precompile_header/main.cpp b/config.tests/precompile_header/main.cpp
index e93b02256d..3ea84a8dae 100644
--- a/config.tests/precompile_header/main.cpp
+++ b/config.tests/precompile_header/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: BSD-3-Clause
#ifndef HEADER_H
# error no go
#endif
diff --git a/config.tests/separate_debug_info/CMakeLists.txt b/config.tests/separate_debug_info/CMakeLists.txt
index e75be13e40..1b38d23e25 100644
--- a/config.tests/separate_debug_info/CMakeLists.txt
+++ b/config.tests/separate_debug_info/CMakeLists.txt
@@ -1,4 +1,6 @@
-# special case skip regeneration
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(objcopytest LANGUAGES CXX)
add_executable(objcopytest main.cpp)
diff --git a/config.tests/static_link_order/CMakeLists.txt b/config.tests/static_link_order/CMakeLists.txt
index b3c122c300..c174fb95db 100644
--- a/config.tests/static_link_order/CMakeLists.txt
+++ b/config.tests/static_link_order/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# The test represents the order-related issue that we have with the ld linker.
#
# CMake versions < 3.21.0 produce the following linker line:
diff --git a/config.tests/static_link_order/main.cpp b/config.tests/static_link_order/main.cpp
index 162c48ce3f..93b8825fd9 100644
--- a/config.tests/static_link_order/main.cpp
+++ b/config.tests/static_link_order/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: BSD-3-Clause
void staticLibFunc1();
diff --git a/config.tests/static_link_order/objlib.cpp b/config.tests/static_link_order/objlib.cpp
index 0da71f4552..0ad7b76a80 100644
--- a/config.tests/static_link_order/objlib.cpp
+++ b/config.tests/static_link_order/objlib.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: BSD-3-Clause
void staticLibFunc2();
diff --git a/config.tests/static_link_order/staticlib1.cpp b/config.tests/static_link_order/staticlib1.cpp
index 19caeead5c..f120f9229b 100644
--- a/config.tests/static_link_order/staticlib1.cpp
+++ b/config.tests/static_link_order/staticlib1.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: BSD-3-Clause
void objLibFunc();
diff --git a/config.tests/static_link_order/staticlib2.cpp b/config.tests/static_link_order/staticlib2.cpp
index 61089d53bd..a9abf424fe 100644
--- a/config.tests/static_link_order/staticlib2.cpp
+++ b/config.tests/static_link_order/staticlib2.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: BSD-3-Clause
void staticLibFunc2() {
}
diff --git a/config.tests/x86_simd/CMakeLists.txt b/config.tests/x86_simd/CMakeLists.txt
index d70f9b54e0..48878d196a 100644
--- a/config.tests/x86_simd/CMakeLists.txt
+++ b/config.tests/x86_simd/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(x86_simd LANGUAGES CXX)
diff --git a/config.tests/x86_simd/main.cpp b/config.tests/x86_simd/main.cpp
index c7032317dd..8634e29cf2 100644
--- a/config.tests/x86_simd/main.cpp
+++ b/config.tests/x86_simd/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Intel Corporation.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: BSD-3-Clause
// All of our supported compilers support <immintrin.h>
#include <immintrin.h>
@@ -12,222 +12,6 @@
# define attribute_target(x)
#endif
-#if T(SSE2)
-attribute_target("sse2") void test_sse2()
-{
- __m128i a = _mm_setzero_si128();
- _mm_maskmoveu_si128(a, _mm_setzero_si128(), 0);
-}
-#endif
-
-#if T(SSE3)
-attribute_target("sse3") void test_sse3()
-{
- __m128d a = _mm_set1_pd(6.28);
- __m128d b = _mm_set1_pd(3.14);
- __m128d result = _mm_addsub_pd(a, b);
- (void) _mm_movedup_pd(result);
-}
-#endif
-
-#if T(SSSE3)
-attribute_target("ssse3") void test_ssse3()
-{
- __m128i a = _mm_set1_epi32(42);
- _mm_abs_epi8(a);
- (void) _mm_sign_epi16(a, _mm_set1_epi32(64));
-}
-#endif
-
-#if T(SSE4_1)
-attribute_target("sse4.1") void test_sse4_1()
-{
- __m128 a = _mm_setzero_ps();
- _mm_ceil_ps(a);
- __m128i result = _mm_mullo_epi32(_mm_set1_epi32(42), _mm_set1_epi32(64));
- (void)result;
-}
-#endif
-
-#if T(SSE4_2)
-attribute_target("sse4.2") void test_sse4_2()
-{
- __m128i a = _mm_setzero_si128();
- __m128i b = _mm_set1_epi32(42);
- (void) _mm_cmpestrm(a, 16, b, 16, 0);
-}
-#endif
-
-#if T(AESNI)
-attribute_target("aes,sse4.2") void test_aesni()
-{
- __m128i a = _mm_setzero_si128();
- __m128i b = _mm_aesenc_si128(a, a);
- __m128i c = _mm_aesdec_si128(a, b);
- (void)c;
-}
-#endif
-
-#if T(F16C)
-attribute_target("f16c") void test_f16c()
-{
- __m128i a = _mm_setzero_si128();
- __m128 b = _mm_cvtph_ps(a);
- __m256 b256 = _mm256_cvtph_ps(a);
- (void) _mm_cvtps_ph(b, 0);
- (void) _mm256_cvtps_ph(b256, 0);
-}
-#endif
-
-#if T(RDRND)
-attribute_target("rdrnd") int test_rdrnd()
-{
- unsigned short us;
- unsigned int ui;
- if (_rdrand16_step(&us))
- return 1;
- if (_rdrand32_step(&ui))
- return 1;
-# if defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64)
- unsigned long long ull;
- if (_rdrand64_step(&ull))
- return 1;
-# endif
-}
-#endif
-
-#if T(RDSEED)
-attribute_target("rdseed") int test_rdseed()
-{
- unsigned short us;
- unsigned int ui;
- if (_rdseed16_step(&us))
- return 1;
- if (_rdseed32_step(&ui))
- return 1;
-# if defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64)
- unsigned long long ull;
- if (_rdseed64_step(&ull))
- return 1;
-# endif
-}
-#endif
-
-#if T(SHANI)
-attribute_target("sha") void test_shani()
-{
- __m128i a = _mm_setzero_si128();
- __m128i b = _mm_sha1rnds4_epu32(a, a, 0);
- __m128i c = _mm_sha1msg1_epu32(a, b);
- __m128i d = _mm_sha256msg2_epu32(b, c);
- (void)d;
-}
-#endif
-
-#if T(AVX)
-attribute_target("avx") void test_avx()
-{
- __m256d a = _mm256_setzero_pd();
- __m256d b = _mm256_set1_pd(42.42);
- (void) _mm256_add_pd(a, b);
-}
-#endif
-
-#if T(AVX2)
-attribute_target("avx2") void test_avx2()
-{
- _mm256_zeroall();
- __m256i a = _mm256_setzero_si256();
- __m256i b = _mm256_and_si256(a, a);
- (void) _mm256_add_epi8(a, b);
-}
-#endif
-
-#if T(AVX512F)
-attribute_target("avx512f") void test_avx512f(char *ptr)
-{
- /* AVX512 Foundation */
- __mmask16 m = ~1;
- __m512i i;
- __m512d d;
- __m512 f;
- i = _mm512_maskz_loadu_epi32(0, ptr);
- d = _mm512_loadu_pd((double *)ptr + 64);
- f = _mm512_loadu_ps((float *)ptr + 128);
- _mm512_mask_storeu_epi64(ptr, m, i);
- _mm512_mask_storeu_ps(ptr + 64, m, f);
- _mm512_mask_storeu_pd(ptr + 128, m, d);
-}
-#endif
-
-#if T(AVX512ER)
-attribute_target("avx512er") void test_avx512er()
-{
- /* AVX512 Exponential and Reciprocal */
- __m512 f;
- f = _mm512_exp2a23_round_ps(f, 8);
-}
-#endif
-
-#if T(AVX512CD)
-attribute_target("avx512cd") void test_avx512cd()
-{
- /* AVX512 Conflict Detection */
- __mmask16 m = ~1;
- __m512i i;
- i = _mm512_maskz_conflict_epi32(m, i);
-}
-#endif
-
-#if T(AVX512PF)
-attribute_target("avx512pf") void test_avx512pf(void *ptr)
-{
- /* AVX512 Prefetch */
- __m512i i;
- __mmask16 m = 0xf;
- _mm512_mask_prefetch_i64scatter_pd(ptr, m, i, 2, 2);
-}
-#endif
-
-#if T(AVX512DQ)
-attribute_target("avx512dq") void test_avx512dq()
-{
- /* AVX512 Doubleword and Quadword support */
- __m512i i;
- __mmask16 m = ~1;
- m = _mm512_movepi32_mask(i);
-}
-#endif
-
-#if T(AVX512BW)
-attribute_target("avx512bw") void test_avx512bw(char *ptr)
-{
- /* AVX512 Byte and Word support */
- __m512i i;
- __mmask16 m = ~1;
- i = _mm512_mask_loadu_epi8(i, m, ptr - 8);
-}
-#endif
-
-#if T(AVX512VL)
-attribute_target("avx512vl") void test_avx512vl(char *ptr)
-{
- /* AVX512 Vector Length */
- __mmask16 m = ~1;
- __m256i i2 = _mm256_maskz_loadu_epi32(0, ptr);
- _mm256_mask_storeu_epi32(ptr + 1, m, i2);
-}
-#endif
-
-#if T(AVX512IFMA)
-attribute_target("avx512ifma") void test_avx512ifma()
-{
- /* AVX512 Integer Fused Multiply-Add */
- __m512i i;
- i = _mm512_madd52lo_epu64(i, i, i);
-}
-#endif
-
#if T(AVX512VBMI2)
attribute_target("avx512vl,avx512vbmi2") void test_avx512vbmi2()
{
diff --git a/config.tests/x86intrin/CMakeLists.txt b/config.tests/x86intrin/CMakeLists.txt
new file mode 100644
index 0000000000..1d5beac5ec
--- /dev/null
+++ b/config.tests/x86intrin/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(x86intrin LANGUAGES CXX)
+add_executable(x86intrin main.cpp)
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU|IntelLLVM|QCC")
+ target_compile_options(x86intrin PUBLIC
+ "-march=cannonlake" "-mrdrnd" "-mrdseed" "-maes" "-msha" "-w")
+elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ target_compile_options(x86intrin PUBLIC "-arch:AVX512" "-W0")
+endif()
diff --git a/config.tests/x86intrin/main.cpp b/config.tests/x86intrin/main.cpp
new file mode 100644
index 0000000000..2e6b198710
--- /dev/null
+++ b/config.tests/x86intrin/main.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: BSD-3-Clause
+
+#include <immintrin.h>
+
+// Skylake AVX512 was added to GCC 4.9, Clang 3.7, and MSVC 2015.
+// Cannon Lake was added to GCC 5, Clang 3.8, and MSVC 2017 15.7,
+// so that's our minimum.
+// Ice Lake was completed with GCC 8, Clang 6, and MSVC 2017 15.8.
+
+int test(int argc, char **argv)
+{
+ unsigned randomvalue;
+ _rdrand32_step(&randomvalue); // RDRND (IVB)
+#ifndef __QNXNTO__ // buggy compiler is missing this intrinsic, but we allow it
+ _rdseed32_step(&randomvalue); // RDSEED (BDW)
+#endif
+ unsigned mask = _blsmsk_u32(argc); // BMI (HSW)
+ int clz = _lzcnt_u32(mask); // LZCNT (HSW)
+ int ctz = _tzcnt_u32(mask); // BMI (HSW)
+ mask = _bzhi_u32(-1, argc); // BMI2 (HSW)
+
+ __m128d d = _mm_setzero_pd(); // SSE2
+ d = _mm_cvtsi32_sd(d, argc); // SSE2
+ __m256d d2 = _mm256_broadcastsd_pd(d); // AVX (SNB)
+ d2 = _mm256_fmadd_pd(d2, d2, d2); // FMA (HSW)
+
+ __m128 f = _mm256_cvtpd_ps(d2); // AVX (SNB)
+ __m128i a = _mm_cvtps_ph(f, 0); // F16C (IVB)
+ __m128i b = _mm_aesenc_si128(a, a); // AESNI (WSM)
+ __m128i c = _mm_sha1rnds4_epu32(a, a, 0); // SHA (CNL)
+ __m128i e = _mm_sha1msg1_epu32(a, b); // SHA (CNL)
+ __m128i g = _mm_sha256msg2_epu32(b, c); // SHA (CNL)
+
+ __m512i zero = _mm512_setzero_si512(); // AVX512F (SKX)
+ __m512i data = _mm512_maskz_loadu_epi8(mask, argv[0]); // AVX512BW (SKX)
+ __m256i ptrs = _mm256_maskz_loadu_epi64(mask, argv); // AVX512VL (SKX)
+ __m512i data2 = _mm512_broadcast_i64x4(ptrs); // AVX512DQ (SKX)
+ __m256i data3 = _mm256_madd52lo_epu64(ptrs, ptrs, ptrs);// AVX512IFMA (CNL)
+ data2 = _mm512_multishift_epi64_epi8(data, data2); // AVX512VBMI (CNL)
+
+ return _mm256_extract_epi32(data3, 0); // AVX2 (HSW)
+}
+
+int main(int argc, char **argv)
+{
+ return test(argc, argv);
+}