diff options
Diffstat (limited to 'config.tests')
27 files changed, 195 insertions, 754 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 6f57430caa..dfef878426 100644 --- a/config.tests/arch/arch.cpp +++ b/config.tests/arch/arch.cpp @@ -1,42 +1,6 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the FOO module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// 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 #define QGLOBAL_H #include "../../src/corelib/global/archdetect.cpp" diff --git a/config.tests/atomicfptr/icc2016_mac.diff b/config.tests/atomicfptr/icc2016_mac.diff deleted file mode 100644 index 5de3b6e19a..0000000000 --- a/config.tests/atomicfptr/icc2016_mac.diff +++ /dev/null @@ -1,18 +0,0 @@ -Patch for fixing std::atomic support for function pointers for the Intel -Composer XE 2016 (compiler version 16.0). - -To apply: - cd /opt/intel/compilers_and_libraries_2016/mac/include - sudo patch -p1 < /path-to-this-file/icc2016_mac.diff - ---- include/stdatomic.h.orig 2015-08-28 15:05:13.000000000 -0700 -+++ include/stdatomic.h 2015-08-28 15:19:25.000000000 -0700 -@@ -451,7 +451,7 @@ - } - _STRONG_INLINE atomic() _DEFAULTED - _STRONG_INLINE _CONSTEXPR atomic(T* _Ptr) -- : atomic_address(_Ptr) -+ : atomic_address((void*)_Ptr) - { - } - _STRONG_INLINE T* operator+=(ptrdiff_t _V) volatile diff --git a/config.tests/atomicfptr/qnx66.txt b/config.tests/atomicfptr/qnx66.txt deleted file mode 100644 index b4ea9d65b5..0000000000 --- a/config.tests/atomicfptr/qnx66.txt +++ /dev/null @@ -1,3 +0,0 @@ -Patch is available from QNX. Please see - -http://www.qnx.com/download/feature.html?programid=27555 diff --git a/config.tests/avx512/avx512.cpp b/config.tests/avx512/avx512.cpp deleted file mode 100644 index 4d47db8463..0000000000 --- a/config.tests/avx512/avx512.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the configuration of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <immintrin.h> - -#ifndef __AVX512F__ -# error "There doesn't seem to be AVX-512 support in this compiler" -#endif -#ifndef WANT_AVX512 -# error ".pro file must define WANT_AVX512 macro to the AVX-512 feature to be tested" -#endif - -// The following checks if __AVXx__ is defined, where x is the value in -// WANT_AVX512 -#define HAS2(x) __AVX512 ## x ## __ -#define HAS(x) HAS2(x) -#if !HAS(WANT_AVX512) -# error "Feature not supported" -#endif - -int main(int, char**argv) -{ - /* AVX512 Foundation */ - __m512i i; - __m512d d; - __m512 f; - __mmask16 m = ~1; - i = _mm512_maskz_loadu_epi32(0, argv); - d = _mm512_loadu_pd((double *)argv + 64); - f = _mm512_loadu_ps((float *)argv + 128); - - // some intrinsic that GCC forgot until GCC 8 - i = _mm512_maskz_set1_epi32(m, '?'); - _mm512_mask_cvtepi32_storeu_epi8(argv, m, i); - -#ifdef WANT_AVX512ER - /* AVX512 Exponential and Reciprocal */ - f = _mm512_exp2a23_round_ps(f, 8); -#endif -#ifdef WANT_AVX512CD - /* AVX512 Conflict Detection */ - i = _mm512_maskz_conflict_epi32(m, i); -#endif -#ifdef WANT_AVX512PF - /* AVX512 Prefetch */ - _mm512_mask_prefetch_i64scatter_pd(argv, 0xf, i, 2, 2); -#endif -#ifdef WANT_AVX512DQ - /* AVX512 Doubleword and Quadword support */ - m = _mm512_movepi32_mask(i); -#endif -#ifdef WANT_AVX512BW - /* AVX512 Byte and Word support */ - i = _mm512_mask_loadu_epi8(i, m, argv - 8); - _mm512_mask_cvtepi16_storeu_epi8(argv + 8, m, i); -#endif -#ifdef WANT_AVX512VL - /* AVX512 Vector Length */ - __m256i i2 = _mm256_maskz_loadu_epi32(0, argv); - _mm256_mask_storeu_epi32(argv + 1, m, i2); -#endif -#ifdef WANT_AVX512IFMA - /* AVX512 Integer Fused Multiply-Add */ - i = _mm512_madd52lo_epu64(i, i, i); -#endif -#ifdef WANT_AVX512VBMI - /* AVX512 Vector Byte Manipulation Instructions */ - i = _mm512_permutexvar_epi8(i, i); -#endif - - _mm512_mask_storeu_epi64(argv, m, i); - _mm512_mask_storeu_ps(argv + 64, m, f); - _mm512_mask_storeu_pd(argv + 128, m, d); - return 0; -} diff --git a/config.tests/binary_for_strip/CMakeLists.txt b/config.tests/binary_for_strip/CMakeLists.txt new file mode 100644 index 0000000000..2395dfad47 --- /dev/null +++ b/config.tests/binary_for_strip/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(proj LANGUAGES CXX) +add_library(lib1 SHARED lib1.cpp) + +add_custom_target(print_lib_path ALL + COMMAND ${CMAKE_COMMAND} -E echo "###$<TARGET_FILE:lib1>###" + VERBATIM +) +add_dependencies(print_lib_path lib1) diff --git a/config.tests/binary_for_strip/lib1.cpp b/config.tests/binary_for_strip/lib1.cpp new file mode 100644 index 0000000000..bb57c4da77 --- /dev/null +++ b/config.tests/binary_for_strip/lib1.cpp @@ -0,0 +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 + +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/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/no_direct_extern_access/lib.cpp b/config.tests/no_direct_extern_access/lib.cpp new file mode 100644 index 0000000000..cf3b18bb38 --- /dev/null +++ b/config.tests/no_direct_extern_access/lib.cpp @@ -0,0 +1,11 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: MIT + +// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 + +#define BUILD +#include "lib.h" + +void *S::ptr = nullptr; +S::~S() { } +void *S::f() { return ptr; } diff --git a/config.tests/no_direct_extern_access/lib.h b/config.tests/no_direct_extern_access/lib.h new file mode 100644 index 0000000000..1a9c3c5533 --- /dev/null +++ b/config.tests/no_direct_extern_access/lib.h @@ -0,0 +1,17 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: MIT + +// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 + +#ifdef BUILD +# define LIB_API __attribute__((visibility("protected"))) +#else +# define LIB_API __attribute__((visibility("default"))) +#endif + +struct LIB_API S +{ + virtual ~S(); + 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/no_direct_extern_access/other.cpp b/config.tests/no_direct_extern_access/other.cpp new file mode 100644 index 0000000000..ff12b10930 --- /dev/null +++ b/config.tests/no_direct_extern_access/other.cpp @@ -0,0 +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=29377 + +__attribute__((visibility("protected"))) void foo() +{ +} 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 32b4075df6..4288ee2731 100644 --- a/config.tests/precompile_header/header.h +++ b/config.tests/precompile_header/header.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the FOO module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// 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 #ifndef HEADER_H #define HEADER_H diff --git a/config.tests/precompile_header/main.cpp b/config.tests/precompile_header/main.cpp index fe8f059d0f..e93b02256d 100644 --- a/config.tests/precompile_header/main.cpp +++ b/config.tests/precompile_header/main.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the FOO module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// 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 #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 c23b57566e..b325bf0cca 100644 --- a/config.tests/separate_debug_info/CMakeLists.txt +++ b/config.tests/separate_debug_info/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # special case skip regeneration cmake_minimum_required(VERSION 3.16) project(objcopytest LANGUAGES CXX) @@ -7,4 +10,5 @@ add_custom_command( POST_BUILD COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $<TARGET_FILE:objcopytest> objcopytest.debug COMMAND ${CMAKE_OBJCOPY} --strip-debug $<TARGET_FILE:objcopytest> - COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=objcopytest.debug $<TARGET_FILE:objcopytest>) + COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=objcopytest.debug $<TARGET_FILE:objcopytest> + VERBATIM) 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 02f10d1620..162c48ce3f 100644 --- a/config.tests/static_link_order/main.cpp +++ b/config.tests/static_link_order/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the utils of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 void staticLibFunc1(); diff --git a/config.tests/static_link_order/objlib.cpp b/config.tests/static_link_order/objlib.cpp index c3889e04d7..0da71f4552 100644 --- a/config.tests/static_link_order/objlib.cpp +++ b/config.tests/static_link_order/objlib.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the utils of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 void staticLibFunc2(); diff --git a/config.tests/static_link_order/staticlib1.cpp b/config.tests/static_link_order/staticlib1.cpp index b2e933e510..19caeead5c 100644 --- a/config.tests/static_link_order/staticlib1.cpp +++ b/config.tests/static_link_order/staticlib1.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the utils of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 void objLibFunc(); diff --git a/config.tests/static_link_order/staticlib2.cpp b/config.tests/static_link_order/staticlib2.cpp index 7e84289797..61089d53bd 100644 --- a/config.tests/static_link_order/staticlib2.cpp +++ b/config.tests/static_link_order/staticlib2.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the utils of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 void staticLibFunc2() { } diff --git a/config.tests/stl/stltest.cpp b/config.tests/stl/stltest.cpp deleted file mode 100644 index a7a36ba0d3..0000000000 --- a/config.tests/stl/stltest.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/* Sample program for configure to test STL support on target -platforms. We are mainly concerned with being able to instantiate -templates for common STL container classes. -*/ - -#include <iterator> -#include <map> -#include <vector> -#include <algorithm> -#include <iostream> -#include <cstddef> - -// something mean to see if the compiler and C++ standard lib are good enough -template<class K, class T> -class DummyClass -{ - // everything in std namespace ? - typedef std::bidirectional_iterator_tag i; - typedef std::ptrdiff_t d; - // typename implemented ? - typedef typename std::map<K,T>::iterator MyIterator; -}; - -// extracted from QVector's strict iterator -template<class T> -class DummyIterator -{ - typedef DummyIterator<int> iterator; -public: - T *i; - typedef std::random_access_iterator_tag iterator_category; - typedef std::ptrdiff_t difference_type; - typedef T value_type; - typedef T *pointer; - typedef T &reference; - - inline DummyIterator() : i(0) {} - inline DummyIterator(T *n) : i(n) {} - inline DummyIterator(const DummyIterator &o): i(o.i){} - inline T &operator*() const { return *i; } - inline T *operator->() const { return i; } - inline T &operator[](int j) const { return *(i + j); } - inline bool operator==(const DummyIterator &o) const { return i == o.i; } - inline bool operator!=(const DummyIterator &o) const { return i != o.i; } - inline bool operator<(const DummyIterator& other) const { return i < other.i; } - inline bool operator<=(const DummyIterator& other) const { return i <= other.i; } - inline bool operator>(const DummyIterator& other) const { return i > other.i; } - inline bool operator>=(const DummyIterator& other) const { return i >= other.i; } - inline DummyIterator &operator++() { ++i; return *this; } - inline DummyIterator operator++(int) { T *n = i; ++i; return n; } - inline DummyIterator &operator--() { i--; return *this; } - inline DummyIterator operator--(int) { T *n = i; i--; return n; } - inline DummyIterator &operator+=(int j) { i+=j; return *this; } - inline DummyIterator &operator-=(int j) { i-=j; return *this; } - inline DummyIterator operator+(int j) const { return DummyIterator(i+j); } - inline DummyIterator operator-(int j) const { return DummyIterator(i-j); } - inline int operator-(DummyIterator j) const { return i - j.i; } -}; - -int main() -{ - std::vector<int> v1; - v1.push_back( 0 ); - v1.push_back( 1 ); - v1.push_back( 2 ); - v1.push_back( 3 ); - v1.push_back( 4 ); - int v1size = v1.size(); - v1size = 0; - int v1capacity = v1.capacity(); - v1capacity = 0; - - std::vector<int>::iterator v1it = std::find( v1.begin(), v1.end(), 99 ); - bool v1notfound = (v1it == v1.end()); - v1notfound = false; - - v1it = std::find( v1.begin(), v1.end(), 3 ); - bool v1found = (v1it != v1.end()); - v1found = false; - - std::vector<int> v2; - std::copy( v1.begin(), v1it, std::back_inserter( v2 ) ); - int v2size = v2.size(); - v2size = 0; - - std::map<int, double> m1; - m1.insert( std::make_pair( 1, 2.0 ) ); - m1.insert( std::make_pair( 3, 2.0 ) ); - m1.insert( std::make_pair( 5, 2.0 ) ); - m1.insert( std::make_pair( 7, 2.0 ) ); - int m1size = m1.size(); - m1size = 0; - std::map<int,double>::iterator m1it = m1.begin(); - for ( ; m1it != m1.end(); ++m1it ) { - int first = (*m1it).first; - first = 0; - double second = (*m1it).second; - second = 0.0; - } - std::map< int, double > m2( m1 ); - int m2size = m2.size(); - m2size = 0; - - DummyIterator<int> it1, it2; - int n = std::distance(it1, it2); - std::advance(it1, 3); - - return 0; -} - 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 0e7ebed8d9..5af3496769 100644 --- a/config.tests/x86_simd/main.cpp +++ b/config.tests/x86_simd/main.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2017 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// 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 // All of our supported compilers support <immintrin.h> #include <immintrin.h> @@ -48,222 +12,23 @@ # define attribute_target(x) #endif -#if T(SSE2) -attribute_target("sse2") void test_sse2() +#if T(AVX512VBMI2) +attribute_target("avx512vl,avx512vbmi2") void test_avx512vbmi2() { - __m128i a = _mm_setzero_si128(); - _mm_maskmoveu_si128(a, _mm_setzero_si128(), 0); + /* AVX512 Vector Byte Manipulation Instructions 2 */ + __m128i a = _mm_maskz_compress_epi16(-1, _mm_set1_epi16(1)); + __m128i b = _mm_shrdi_epi32(a, a, 7); } #endif -#if T(SSE3) -attribute_target("sse3") void test_sse3() +#if T(VAES) +// VAES does not require AVX512 and works on Alder Lake +attribute_target("avx2,vaes") void test_vaes() { - __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) -# if defined(__WIN64__) && defined(__GNUC__) && !defined(__clang__) -# error "AVX support is broken in 64-bit MinGW - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49001" -# endif -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); + /* 256- and 512-bit AES */ + __m256i a = _mm256_set1_epi32(-1); + __m256i b = _mm256_aesenc_epi128(a, a); + __m256i c = _mm256_aesdec_epi128(b, a); } #endif 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..297586fb4e --- /dev/null +++ b/config.tests/x86intrin/main.cpp @@ -0,0 +1,48 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#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); +} |