[clang] [X86] Update BMI, BMI2 and TBM constexpr tests (PR #156260)
Burhan Söğüt via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 1 03:25:33 PDT 2025
https://github.com/bursow updated https://github.com/llvm/llvm-project/pull/156260
>From 96b664cb2f16fc8ad29d0273cc62be906afb2491 Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Sun, 31 Aug 2025 21:14:20 +0300
Subject: [PATCH 1/7] [X86] Update BMI, BMI2 and TBM constexpr tests
Update constexpr tests in these files to use the TEST_CONSTEXPR helper macro for clarity and consistency.
---
clang/test/CodeGen/X86/bmi-builtins.c | 117 +++++++++++++------------
clang/test/CodeGen/X86/bmi2-builtins.c | 61 ++++++-------
clang/test/CodeGen/X86/tbm-builtins.c | 49 ++++++-----
3 files changed, 115 insertions(+), 112 deletions(-)
diff --git a/clang/test/CodeGen/X86/bmi-builtins.c b/clang/test/CodeGen/X86/bmi-builtins.c
index ded40ca59781e..ffbc1da3000cc 100644
--- a/clang/test/CodeGen/X86/bmi-builtins.c
+++ b/clang/test/CodeGen/X86/bmi-builtins.c
@@ -5,6 +5,7 @@
#include <immintrin.h>
+#include <builtin_test_helpers.h>
// NOTE: This should match the tests in llvm/test/CodeGen/X86/bmi-intrinsics-fast-isel.ll
@@ -237,85 +238,85 @@ unsigned long long test_blsr_u64(unsigned long long __X) {
// Test constexpr handling.
#if defined(__cplusplus) && (__cplusplus >= 201103L)
-char andnu32[__andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98) ? 1 : -1];
-char andn2u32[_andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98) ? 1 : -1];
+TEST_CONSTEXPR(__andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
+TEST_CONSTEXPR(_andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
-char bextr32_0[__bextr_u32(0x00000000, 0x00000000) == 0x00000000 ? 1 : -1];
-char bextr32_1[__bextr_u32(0x000003F0, 0xFFFF1004) == 0x0000003F ? 1 : -1];
-char bextr32_2[__bextr_u32(0x000003F0, 0xFFFF3008) == 0x00000003 ? 1 : -1];
+TEST_CONSTEXPR(__bextr_u32(0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
+TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
-char bextr32_3[_bextr2_u32(0x00000000, 0x00000000) == 0x00000000 ? 1 : -1];
-char bextr32_4[_bextr2_u32(0x000003F0, 0xFFFF1004) == 0x0000003F ? 1 : -1];
-char bextr32_5[_bextr2_u32(0x000003F0, 0xFFFF3008) == 0x00000003 ? 1 : -1];
+TEST_CONSTEXPR(_bextr2_u32(0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
+TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
-char bextr32_6[_bextr_u32(0x00000000, 0x00000000, 0x00000000) == 0x00000000 ? 1 : -1];
-char bextr32_7[_bextr_u32(0x000003F0, 0xFFFFFF04, 0xFFFFFF10) == 0x0000003F ? 1 : -1];
-char bextr32_8[_bextr_u32(0x000003F0, 0xFFFFFF08, 0xFFFFFF30) == 0x00000003 ? 1 : -1];
+TEST_CONSTEXPR(_bextr_u32(0x00000000, 0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF04, 0xFFFFFF10) == 0x0000003F);
+TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF08, 0xFFFFFF30) == 0x00000003);
-char blsiu32[__blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF) ? 1 : -1];
-char blsi2u32[_blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF) ? 1 : -1];
+TEST_CONSTEXPR(__blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
+TEST_CONSTEXPR(_blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
-char blsmasku32[__blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)) ? 1 : -1];
-char blsmask2u32[_blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
+TEST_CONSTEXPR(_blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
-char blsru32[__blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)) ? 1 : -1];
-char blsr2u32[_blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
+TEST_CONSTEXPR(_blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
-char tzcntu16_0[__tzcnt_u16(0x0000) == 16 ? 1 : -1];
-char tzcntu16_1[__tzcnt_u16(0x0001) == 0 ? 1 : -1];
-char tzcntu16_2[__tzcnt_u16(0x0010) == 4 ? 1 : -1];
+TEST_CONSTEXPR(__tzcnt_u16(0x0000) == 16);
+TEST_CONSTEXPR(__tzcnt_u16(0x0001) == 0);
+TEST_CONSTEXPR(__tzcnt_u16(0x0010) == 4);
-char tzcnt2u16_0[_tzcnt_u16(0x0000) == 16 ? 1 : -1];
-char tzcnt2u16_1[_tzcnt_u16(0x0001) == 0 ? 1 : -1];
-char tzcnt2u16_2[_tzcnt_u16(0x0010) == 4 ? 1 : -1];
+TEST_CONSTEXPR(_tzcnt_u16(0x0000) == 16);
+TEST_CONSTEXPR(_tzcnt_u16(0x0001) == 0);
+TEST_CONSTEXPR(_tzcnt_u16(0x0010) == 4);
-char tzcntu32_0[__tzcnt_u32(0x00000000) == 32 ? 1 : -1];
-char tzcntu32_1[__tzcnt_u32(0x00000001) == 0 ? 1 : -1];
-char tzcntu32_2[__tzcnt_u32(0x00000080) == 7 ? 1 : -1];
+TEST_CONSTEXPR(__tzcnt_u32(0x00000000) == 32);
+TEST_CONSTEXPR(__tzcnt_u32(0x00000001) == 0);
+TEST_CONSTEXPR(__tzcnt_u32(0x00000080) == 7);
-char tzcnt2u32_0[_tzcnt_u32(0x00000000) == 32 ? 1 : -1];
-char tzcnt2u32_1[_tzcnt_u32(0x00000001) == 0 ? 1 : -1];
-char tzcnt2u32_2[_tzcnt_u32(0x00000080) == 7 ? 1 : -1];
+TEST_CONSTEXPR(_tzcnt_u32(0x00000000) == 32);
+TEST_CONSTEXPR(_tzcnt_u32(0x00000001) == 0);
+TEST_CONSTEXPR(_tzcnt_u32(0x00000080) == 7);
-char tzcnt3u32_0[_mm_tzcnt_32(0x00000000) == 32 ? 1 : -1];
-char tzcnt3u32_1[_mm_tzcnt_32(0x00000001) == 0 ? 1 : -1];
-char tzcnt3u32_2[_mm_tzcnt_32(0x00000080) == 7 ? 1 : -1];
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000000) == 32);
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000001) == 0);
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000080) == 7);
#ifdef __x86_64__
-char andnu64[__andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL) ? 1 : -1];
-char andn2u64[_andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL) ? 1 : -1];
+TEST_CONSTEXPR(__andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
+TEST_CONSTEXPR(_andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
-char bextr64_0[__bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char bextr64_1[__bextr_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL ? 1 : -1];
-char bextr64_2[__bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL ? 1 : -1];
+TEST_CONSTEXPR(__bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
-char bextr64_3[_bextr2_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char bextr64_4[_bextr2_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL ? 1 : -1];
-char bextr64_5[_bextr2_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL ? 1 : -1];
+TEST_CONSTEXPR(_bextr2_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
-char bextr64_6[_bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char bextr64_7[_bextr_u64(0xF000000000000001ULL, 0x0000000000000001ULL, 0x0000000000000040ULL) == 0x7800000000000000ULL ? 1 : -1];
-char bextr64_8[_bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFFFF01ULL, 0xFFFFFFFFFFFFFF10ULL) == 0x0000000000000000ULL ? 1 : -1];
+TEST_CONSTEXPR(_bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0x0000000000000001ULL, 0x0000000000000040ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFFFF01ULL, 0xFFFFFFFFFFFFFF10ULL) == 0x0000000000000000ULL);
-char blsiu64[__blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL) ? 1 : -1];
-char blsi2u64[_blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL) ? 1 : -1];
+TEST_CONSTEXPR(__blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
+TEST_CONSTEXPR(_blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
-char blsmasku64[__blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)) ? 1 : -1];
-char blsmask2u64[_blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
+TEST_CONSTEXPR(_blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
-char blsru64[__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)) ? 1 : -1];
-char blsr2u64[_blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
+TEST_CONSTEXPR(_blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
-char tzcntu64_0[__tzcnt_u64(0x0000000000000000ULL) == 64 ? 1 : -1];
-char tzcntu64_1[__tzcnt_u64(0x0000000000000001ULL) == 0 ? 1 : -1];
-char tzcntu64_2[__tzcnt_u64(0x0000000800000000ULL) == 35 ? 1 : -1];
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000800000000ULL) == 35);
-char tzcnt2u64_0[_tzcnt_u64(0x0000000000000000ULL) == 64 ? 1 : -1];
-char tzcnt2u64_1[_tzcnt_u64(0x0000000000000001ULL) == 0 ? 1 : -1];
-char tzcnt2u64_2[_tzcnt_u64(0x0000000800000000ULL) == 35 ? 1 : -1];
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000800000000ULL) == 35);
-char tzcnt3u64_0[_mm_tzcnt_64(0x0000000000000000ULL) == 64 ? 1 : -1];
-char tzcnt3u64_1[_mm_tzcnt_64(0x0000000000000001ULL) == 0 ? 1 : -1];
-char tzcnt3u64_2[_mm_tzcnt_64(0x0000000800000000ULL) == 35 ? 1 : -1];
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000800000000ULL) == 35);
#endif
#endif
\ No newline at end of file
diff --git a/clang/test/CodeGen/X86/bmi2-builtins.c b/clang/test/CodeGen/X86/bmi2-builtins.c
index 48424f553768b..629fa9aed2ae2 100644
--- a/clang/test/CodeGen/X86/bmi2-builtins.c
+++ b/clang/test/CodeGen/X86/bmi2-builtins.c
@@ -5,6 +5,7 @@
#include <immintrin.h>
+#include "builtin_test_helpers.h"
unsigned int test_bzhi_u32(unsigned int __X, unsigned int __Y) {
// CHECK: @llvm.x86.bmi.bzhi.32
@@ -54,22 +55,22 @@ unsigned long long test_mulx_u64(unsigned long long __X, unsigned long long __Y,
// Test constexpr handling.
#if defined(__cplusplus) && (__cplusplus >= 201103L)
-char bzhi32_0[_bzhi_u32(0x89ABCDEF, 0) == 0x00000000 ? 1 : -1];
-char bzhi32_1[_bzhi_u32(0x89ABCDEF, 16) == 0x0000CDEF ? 1 : -1];
-char bzhi32_2[_bzhi_u32(0x89ABCDEF, 31) == 0x09ABCDEF ? 1 : -1];
-char bzhi32_3[_bzhi_u32(0x89ABCDEF, 32) == 0x89ABCDEF ? 1 : -1];
-char bzhi32_4[_bzhi_u32(0x89ABCDEF, 99) == 0x89ABCDEF ? 1 : -1];
-char bzhi32_5[_bzhi_u32(0x89ABCDEF, 260) == 0x0000000F ? 1 : -1];
-
-char pdep32_0[_pdep_u32(0x89ABCDEF, 0x00000000) == 0x00000000 ? 1 : -1];
-char pdep32_1[_pdep_u32(0x89ABCDEF, 0x000000F0) == 0x000000F0 ? 1 : -1];
-char pdep32_2[_pdep_u32(0x89ABCDEF, 0xF00000F0) == 0xE00000F0 ? 1 : -1];
-char pdep32_3[_pdep_u32(0x89ABCDEF, 0xFFFFFFFF) == 0x89ABCDEF ? 1 : -1];
-
-char pext32_0[_pext_u32(0x89ABCDEF, 0x00000000) == 0x00000000 ? 1 : -1];
-char pext32_1[_pext_u32(0x89ABCDEF, 0x000000F0) == 0x0000000E ? 1 : -1];
-char pext32_2[_pext_u32(0x89ABCDEF, 0xF00000F0) == 0x0000008E ? 1 : -1];
-char pext32_3[_pext_u32(0x89ABCDEF, 0xFFFFFFFF) == 0x89ABCDEF ? 1 : -1];
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 0) == 0x00000000);
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 16) == 0x0000CDEF);
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 31) == 0x09ABCDEF);
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 32) == 0x89ABCDEF);
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 99) == 0x89ABCDEF);
+TEST_CONSTEXPR(_bzhi_u32(0x89ABCDEF, 260) == 0x0000000F);
+
+TEST_CONSTEXPR(_pdep_u32(0x89ABCDEF, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_pdep_u32(0x89ABCDEF, 0x000000F0) == 0x000000F0);
+TEST_CONSTEXPR(_pdep_u32(0x89ABCDEF, 0xF00000F0) == 0xE00000F0);
+TEST_CONSTEXPR(_pdep_u32(0x89ABCDEF, 0xFFFFFFFF) == 0x89ABCDEF);
+
+TEST_CONSTEXPR(_pext_u32(0x89ABCDEF, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_pext_u32(0x89ABCDEF, 0x000000F0) == 0x0000000E);
+TEST_CONSTEXPR(_pext_u32(0x89ABCDEF, 0xF00000F0) == 0x0000008E);
+TEST_CONSTEXPR(_pext_u32(0x89ABCDEF, 0xFFFFFFFF) == 0x89ABCDEF);
constexpr unsigned long long
test_mulx_u32(unsigned int X, unsigned int Y)
@@ -84,20 +85,20 @@ void mulxu32() {
}
#ifdef __x86_64__
-char bzhi64_0[_bzhi_u64(0x0123456789ABCDEFULL, 0) == 0x0000000000000000ULL ? 1 : -1];
-char bzhi64_1[_bzhi_u64(0x0123456789ABCDEFULL, 32) == 0x0000000089ABCDEFULL ? 1 : -1];
-char bzhi64_2[_bzhi_u64(0x0123456789ABCDEFULL, 99) == 0x0123456789ABCDEFULL ? 1 : -1];
-char bzhi64_3[_bzhi_u64(0x0123456789ABCDEFULL, 520) == 0x00000000000000EFULL ? 1 : -1];
-
-char pdep64_0[_pdep_u64(0x0123456789ABCDEFULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char pdep64_1[_pdep_u64(0x0123456789ABCDEFULL, 0x00000000000000F0ULL) == 0x00000000000000F0ULL ? 1 : -1];
-char pdep64_2[_pdep_u64(0x0123456789ABCDEFULL, 0xF00000F0F00000F0ULL) == 0xC00000D0E00000F0ULL ? 1 : -1];
-char pdep64_3[_pdep_u64(0x0123456789ABCDEFULL, 0xFFFFFFFFFFFFFFFFULL) == 0x0123456789ABCDEFULL ? 1 : -1];
-
-char pext64_0[_pext_u64(0x0123456789ABCDEFULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char pext64_1[_pext_u64(0x0123456789ABCDEFULL, 0x00000000000000F0ULL) == 0x000000000000000EULL ? 1 : -1];
-char pext64_2[_pext_u64(0x0123456789ABCDEFULL, 0xF00000F0F00000F0ULL) == 0x000000000000068EULL ? 1 : -1];
-char pext64_3[_pext_u64(0x0123456789ABCDEFULL, 0xFFFFFFFFFFFFFFFFULL) == 0x0123456789ABCDEFULL ? 1 : -1];
+TEST_CONSTEXPR(_bzhi_u64(0x0123456789ABCDEFULL, 0) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_bzhi_u64(0x0123456789ABCDEFULL, 32) == 0x0000000089ABCDEFULL);
+TEST_CONSTEXPR(_bzhi_u64(0x0123456789ABCDEFULL, 99) == 0x0123456789ABCDEFULL);
+TEST_CONSTEXPR(_bzhi_u64(0x0123456789ABCDEFULL, 520) == 0x00000000000000EFULL);
+
+TEST_CONSTEXPR(_pdep_u64(0x0123456789ABCDEFULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_pdep_u64(0x0123456789ABCDEFULL, 0x00000000000000F0ULL) == 0x00000000000000F0ULL);
+TEST_CONSTEXPR(_pdep_u64(0x0123456789ABCDEFULL, 0xF00000F0F00000F0ULL) == 0xC00000D0E00000F0ULL);
+TEST_CONSTEXPR(_pdep_u64(0x0123456789ABCDEFULL, 0xFFFFFFFFFFFFFFFFULL) == 0x0123456789ABCDEFULL);
+
+TEST_CONSTEXPR(_pext_u64(0x0123456789ABCDEFULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_pext_u64(0x0123456789ABCDEFULL, 0x00000000000000F0ULL) == 0x000000000000000EULL);
+TEST_CONSTEXPR(_pext_u64(0x0123456789ABCDEFULL, 0xF00000F0F00000F0ULL) == 0x000000000000068EULL);
+TEST_CONSTEXPR(_pext_u64(0x0123456789ABCDEFULL, 0xFFFFFFFFFFFFFFFFULL) == 0x0123456789ABCDEFULL);
constexpr unsigned __int128
test_mulx_u64(unsigned long long X, unsigned long long Y)
diff --git a/clang/test/CodeGen/X86/tbm-builtins.c b/clang/test/CodeGen/X86/tbm-builtins.c
index d916627a23f57..43b4c43377837 100644
--- a/clang/test/CodeGen/X86/tbm-builtins.c
+++ b/clang/test/CodeGen/X86/tbm-builtins.c
@@ -2,6 +2,7 @@
// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +tbm -emit-llvm -o - | FileCheck %s
#include <x86intrin.h>
+#include "builtin_test_helpers.h"
// NOTE: This should match the tests in llvm/test/CodeGen/X86/tbm-intrinsics-fast-isel.ll
@@ -181,31 +182,31 @@ unsigned long long test__tzmsk_u64(unsigned long long a) {
// Test constexpr handling.
#if defined(__cplusplus) && (__cplusplus >= 201103L)
-char bextri32_0[__bextri_u32(0x00000000, 0x00000000) == 0x00000000 ? 1 : -1];
-char bextri32_1[__bextri_u32(0x000003F0, 0xFFFF1004) == 0x0000003F ? 1 : -1];
-char bextri32_2[__bextri_u32(0x000003F0, 0xFFFF3008) == 0x00000003 ? 1 : -1];
-
-char blcfill32[__blcfill_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF + 1)) ? 1 : -1];
-char blci32[__blci_u32(0x89ABCDEF) == (0x89ABCDEF | ~(0x89ABCDEF + 1)) ? 1 : -1];
-char blcmsk32[__blcmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF + 1)) ? 1 : -1];
-char blcs32[__blcs_u32(0x89ABCDEF) == (0x89ABCDEF | (0x89ABCDEF + 1)) ? 1 : -1];
-char blsfill32[__blsfill_u32(0x89ABCDEF) == (0x89ABCDEF | (0x89ABCDEF - 1)) ? 1 : -1];
-char blsic32[__blsic_u32(0x89ABCDEF) == (~0x89ABCDEF | (0x89ABCDEF - 1)) ? 1 : -1];
-char t1mskc32[__t1mskc_u32(0x89ABCDEF) == (~0x89ABCDEF | (0x89ABCDEF + 1)) ? 1 : -1];
-char tzmsk32[__tzmsk_u32(0x89ABCDEF) == (~0x89ABCDEF & (0x89ABCDEF - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__bextri_u32(0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(__bextri_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
+TEST_CONSTEXPR(__bextri_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
+
+TEST_CONSTEXPR(__blcfill_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF + 1)));
+TEST_CONSTEXPR(__blci_u32(0x89ABCDEF) == (0x89ABCDEF | ~(0x89ABCDEF + 1)));
+TEST_CONSTEXPR(__blcmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF + 1)));
+TEST_CONSTEXPR(__blcs_u32(0x89ABCDEF) == (0x89ABCDEF | (0x89ABCDEF + 1)));
+TEST_CONSTEXPR(__blsfill_u32(0x89ABCDEF) == (0x89ABCDEF | (0x89ABCDEF - 1)));
+TEST_CONSTEXPR(__blsic_u32(0x89ABCDEF) == (~0x89ABCDEF | (0x89ABCDEF - 1)));
+TEST_CONSTEXPR(__t1mskc_u32(0x89ABCDEF) == (~0x89ABCDEF | (0x89ABCDEF + 1)));
+TEST_CONSTEXPR(__tzmsk_u32(0x89ABCDEF) == (~0x89ABCDEF & (0x89ABCDEF - 1)));
#ifdef __x86_64__
-char bextri64_0[__bextri_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL ? 1 : -1];
-char bextri64_1[__bextri_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL ? 1 : -1];
-char bextri64_2[__bextri_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL ? 1 : -1];
-
-char blcfill64[__blcfill_u64(0xFEDCBA9876543210) == (0xFEDCBA9876543210 & (0xFEDCBA9876543210 + 1)) ? 1 : -1];
-char blci64[__blci_u64(0xFEDCBA9876543210) == (0xFEDCBA9876543210 | ~(0xFEDCBA9876543210 + 1)) ? 1 : -1];
-char blcmsk64[__blcmsk_u64(0xFEDCBA9876543210) == (0xFEDCBA9876543210 ^ (0xFEDCBA9876543210 + 1)) ? 1 : -1];
-char blcs64[__blcs_u64(0xFEDCBA9876543210) == (0xFEDCBA9876543210 | (0xFEDCBA9876543210 + 1)) ? 1 : -1];
-char blsfill64[__blsfill_u64(0xFEDCBA9876543210) == (0xFEDCBA9876543210 | (0xFEDCBA9876543210 - 1)) ? 1 : -1];
-char blsic64[__blsic_u64(0xFEDCBA9876543210) == (~0xFEDCBA9876543210 | (0xFEDCBA9876543210 - 1)) ? 1 : -1];
-char t1mskc64[__t1mskc_u64(0xFEDCBA9876543210) == (~0xFEDCBA9876543210 | (0xFEDCBA9876543210 + 1)) ? 1 : -1];
-char tzmsk64[__tzmsk_u64(0xFEDCBA9876543210) == (~0xFEDCBA9876543210 & (0xFEDCBA9876543210 - 1)) ? 1 : -1];
+TEST_CONSTEXPR(__bextri_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(__bextri_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(__bextri_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
+
+TEST_CONSTEXPR(__blcfill_u64(0xFEDCBA9876543210ULL) == (0xFEDCBA9876543210ULL & (0xFEDCBA9876543210ULL + 1)));
+TEST_CONSTEXPR(__blci_u64(0xFEDCBA9876543210ULL) == (0xFEDCBA9876543210ULL | ~(0xFEDCBA9876543210ULL + 1)));
+TEST_CONSTEXPR(__blcmsk_u64(0xFEDCBA9876543210ULL) == (0xFEDCBA9876543210ULL ^ (0xFEDCBA9876543210ULL + 1)));
+TEST_CONSTEXPR(__blcs_u64(0xFEDCBA9876543210ULL) == (0xFEDCBA9876543210ULL | (0xFEDCBA9876543210ULL + 1)));
+TEST_CONSTEXPR(__blsfill_u64(0xFEDCBA9876543210ULL) == (0xFEDCBA9876543210ULL | (0xFEDCBA9876543210ULL - 1)));
+TEST_CONSTEXPR(__blsic_u64(0xFEDCBA9876543210ULL) == (~0xFEDCBA9876543210ULL | (0xFEDCBA9876543210ULL - 1)));
+TEST_CONSTEXPR(__t1mskc_u64(0xFEDCBA9876543210ULL) == (~0xFEDCBA9876543210ULL | (0xFEDCBA9876543210ULL + 1)));
+TEST_CONSTEXPR(__tzmsk_u64(0xFEDCBA9876543210ULL) == (~0xFEDCBA9876543210ULL & (0xFEDCBA9876543210ULL - 1)));
#endif
#endif
>From b6f2164ca2f345b90bb78a847cbbf03801e548fd Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Sun, 31 Aug 2025 21:47:31 +0300
Subject: [PATCH 2/7] Fix: Use double quotes for builtin_test_helpers.h include
---
clang/test/CodeGen/X86/bmi-builtins.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/test/CodeGen/X86/bmi-builtins.c b/clang/test/CodeGen/X86/bmi-builtins.c
index ffbc1da3000cc..a68853f595f9d 100644
--- a/clang/test/CodeGen/X86/bmi-builtins.c
+++ b/clang/test/CodeGen/X86/bmi-builtins.c
@@ -5,7 +5,7 @@
#include <immintrin.h>
-#include <builtin_test_helpers.h>
+#include "builtin_test_helpers.h"
// NOTE: This should match the tests in llvm/test/CodeGen/X86/bmi-intrinsics-fast-isel.ll
>From 9fd27a5a68e309efaedbe74de7e4830232c2090f Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Sun, 31 Aug 2025 22:11:29 +0300
Subject: [PATCH 3/7] Fix: builtin_test_helpers.h
---
clang/test/CodeGen/X86/builtin_test_helpers.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/test/CodeGen/X86/builtin_test_helpers.h b/clang/test/CodeGen/X86/builtin_test_helpers.h
index 2476a2b7c723a..77bb19265d070 100644
--- a/clang/test/CodeGen/X86/builtin_test_helpers.h
+++ b/clang/test/CodeGen/X86/builtin_test_helpers.h
@@ -290,7 +290,7 @@ constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01,
v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
}
-#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)
+#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
#else
>From 7472d171db7b7bc1654190e6db07e3632b1e67b2 Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Sun, 31 Aug 2025 22:39:52 +0300
Subject: [PATCH 4/7] Fix: C++11 compatibility issues in builtin test helpers
---
clang/test/CodeGen/X86/builtin_test_helpers.h | 211 ++++++++----------
1 file changed, 88 insertions(+), 123 deletions(-)
diff --git a/clang/test/CodeGen/X86/builtin_test_helpers.h b/clang/test/CodeGen/X86/builtin_test_helpers.h
index 77bb19265d070..a761e6daa60e2 100644
--- a/clang/test/CodeGen/X86/builtin_test_helpers.h
+++ b/clang/test/CodeGen/X86/builtin_test_helpers.h
@@ -4,9 +4,14 @@
#if defined(__cplusplus) && (__cplusplus >= 201103L)
+
+#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
+
+// alL constexpr functions C++11.
+
+
constexpr bool match_m64(__m64 _v, unsigned long long a) {
- __v1du v = (__v1du)_v;
- return v[0] == a;
+ return ((__v1du)_v)[0] == a;
}
constexpr bool match_v1di(__m64 v, long long a) {
@@ -14,61 +19,50 @@ constexpr bool match_v1di(__m64 v, long long a) {
}
constexpr bool match_v1du(__m64 _v, unsigned long long a) {
- __v1du v = (__v1du)_v;
- return v[0] == a;
+ return ((__v1du)_v)[0] == a;
}
constexpr bool match_v2si(__m64 _v, int a, int b) {
- __v2si v = (__v2si)_v;
- return v[0] == a && v[1] == b;
+ return ((__v2si)_v)[0] == a && ((__v2si)_v)[1] == b;
}
constexpr bool match_v2su(__m64 _v, unsigned a, unsigned b) {
- __v2su v = (__v2su)_v;
- return v[0] == a && v[1] == b;
+ return ((__v2su)_v)[0] == a && ((__v2su)_v)[1] == b;
}
constexpr bool match_v4hi(__m64 _v, short a, short b, short c, short d) {
- __v4hi v = (__v4hi)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4hi)_v)[0] == a && ((__v4hi)_v)[1] == b && ((__v4hi)_v)[2] == c && ((__v4hi)_v)[3] == d;
}
constexpr bool match_v4hu(__m64 _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d) {
- __v4hu v = (__v4hu)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4hu)_v)[0] == a && ((__v4hu)_v)[1] == b && ((__v4hu)_v)[2] == c && ((__v4hu)_v)[3] == d;
}
constexpr bool match_v8qi(__m64 _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h) {
- __v8qs v = (__v8qs)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8qs)_v)[0] == a && ((__v8qs)_v)[1] == b && ((__v8qs)_v)[2] == c && ((__v8qs)_v)[3] == d && ((__v8qs)_v)[4] == e && ((__v8qs)_v)[5] == f && ((__v8qs)_v)[6] == g && ((__v8qs)_v)[7] == h;
}
constexpr bool match_v8qu(__m64 _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h) {
- __v8qu v = (__v8qu)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8qu)_v)[0] == a && ((__v8qu)_v)[1] == b && ((__v8qu)_v)[2] == c && ((__v8qu)_v)[3] == d && ((__v8qu)_v)[4] == e && ((__v8qu)_v)[5] == f && ((__v8qu)_v)[6] == g && ((__v8qu)_v)[7] == h;
}
constexpr bool match_m128(__m128 _v, float a, float b, float c, float d) {
- __v4su v = (__v4su)_v;
- return v[0] == __builtin_bit_cast(unsigned, a) && v[1] == __builtin_bit_cast(unsigned, b) && v[2] == __builtin_bit_cast(unsigned, c) && v[3] == __builtin_bit_cast(unsigned, d);
+ return ((__v4su)_v)[0] == __builtin_bit_cast(unsigned, a) && ((__v4su)_v)[1] == __builtin_bit_cast(unsigned, b) && ((__v4su)_v)[2] == __builtin_bit_cast(unsigned, c) && ((__v4su)_v)[3] == __builtin_bit_cast(unsigned, d);
}
constexpr bool match_m128d(__m128d _v, double a, double b) {
- __v2du v = (__v2du)_v;
- return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b);
+ return ((__v2du)_v)[0] == __builtin_bit_cast(unsigned long long, a) && ((__v2du)_v)[1] == __builtin_bit_cast(unsigned long long, b);
}
#ifdef __SSE2__
constexpr bool match_m128h(__m128h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07) {
- __v8hu v = (__v8hu)_v;
- return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07);
+ return ((__v8hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v8hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v8hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v8hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ ((__v8hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v8hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v8hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v8hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07);
}
#endif
constexpr bool match_m128i(__m128i _v, unsigned long long a, unsigned long long b) {
- __v2du v = (__v2du)_v;
- return v[0] == a && v[1] == b;
+ return ((__v2du)_v)[0] == a && ((__v2du)_v)[1] == b;
}
constexpr bool match_v2di(__m128i v, long long a, long long b) {
@@ -76,126 +70,106 @@ constexpr bool match_v2di(__m128i v, long long a, long long b) {
}
constexpr bool match_v2du(__m128i _v, unsigned long long a, unsigned long long b) {
- __v2du v = (__v2du)_v;
- return v[0] == a && v[1] == b;
+ return ((__v2du)_v)[0] == a && ((__v2du)_v)[1] == b;
}
constexpr bool match_v4si(__m128i _v, int a, int b, int c, int d) {
- __v4si v = (__v4si)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4si)_v)[0] == a && ((__v4si)_v)[1] == b && ((__v4si)_v)[2] == c && ((__v4si)_v)[3] == d;
}
constexpr bool match_v4su(__m128i _v, unsigned a, unsigned b, unsigned c, unsigned d) {
- __v4su v = (__v4su)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4su)_v)[0] == a && ((__v4su)_v)[1] == b && ((__v4su)_v)[2] == c && ((__v4su)_v)[3] == d;
}
constexpr bool match_v8hi(__m128i _v, short a, short b, short c, short d, short e, short f, short g, short h) {
- __v8hi v = (__v8hi)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8hi)_v)[0] == a && ((__v8hi)_v)[1] == b && ((__v8hi)_v)[2] == c && ((__v8hi)_v)[3] == d && ((__v8hi)_v)[4] == e && ((__v8hi)_v)[5] == f && ((__v8hi)_v)[6] == g && ((__v8hi)_v)[7] == h;
}
constexpr bool match_v8hu(__m128i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h) {
- __v8hu v = (__v8hu)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8hu)_v)[0] == a && ((__v8hu)_v)[1] == b && ((__v8hu)_v)[2] == c && ((__v8hu)_v)[3] == d && ((__v8hu)_v)[4] == e && ((__v8hu)_v)[5] == f && ((__v8hu)_v)[6] == g && ((__v8hu)_v)[7] == h;
}
constexpr bool match_v16qi(__m128i _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h, signed char i, signed char j, signed char k, signed char l, signed char m, signed char n, signed char o, signed char p) {
- __v16qs v = (__v16qs)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+ return ((__v16qs)_v)[0] == a && ((__v16qs)_v)[1] == b && ((__v16qs)_v)[2] == c && ((__v16qs)_v)[3] == d && ((__v16qs)_v)[4] == e && ((__v16qs)_v)[5] == f && ((__v16qs)_v)[6] == g && ((__v16qs)_v)[7] == h && ((__v16qs)_v)[8] == i && ((__v16qs)_v)[9] == j && ((__v16qs)_v)[10] == k && ((__v16qs)_v)[11] == l && ((__v16qs)_v)[12] == m && ((__v16qs)_v)[13] == n && ((__v16qs)_v)[14] == o && ((__v16qs)_v)[15] == p;
}
constexpr bool match_v16qu(__m128i _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h, unsigned char i, unsigned char j, unsigned char k, unsigned char l, unsigned char m, unsigned char n, unsigned char o, unsigned char p) {
- __v16qu v = (__v16qu)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+ return ((__v16qu)_v)[0] == a && ((__v16qu)_v)[1] == b && ((__v16qu)_v)[2] == c && ((__v16qu)_v)[3] == d && ((__v16qu)_v)[4] == e && ((__v16qu)_v)[5] == f && ((__v16qu)_v)[6] == g && ((__v16qu)_v)[7] == h && ((__v16qu)_v)[8] == i && ((__v16qu)_v)[9] == j && ((__v16qu)_v)[10] == k && ((__v16qu)_v)[11] == l && ((__v16qu)_v)[12] == m && ((__v16qu)_v)[13] == n && ((__v16qu)_v)[14] == o && ((__v16qu)_v)[15] == p;
}
constexpr bool match_m256(__m256 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07) {
- __v8su v = (__v8su)_v;
- return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07);
+ return ((__v8su)_v)[ 0] == __builtin_bit_cast(unsigned, __e00) && ((__v8su)_v)[ 1] == __builtin_bit_cast(unsigned, __e01) && ((__v8su)_v)[ 2] == __builtin_bit_cast(unsigned, __e02) && ((__v8su)_v)[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ ((__v8su)_v)[ 4] == __builtin_bit_cast(unsigned, __e04) && ((__v8su)_v)[ 5] == __builtin_bit_cast(unsigned, __e05) && ((__v8su)_v)[ 6] == __builtin_bit_cast(unsigned, __e06) && ((__v8su)_v)[ 7] == __builtin_bit_cast(unsigned, __e07);
}
constexpr bool match_m256d(__m256d _v, double a, double b, double c, double d) {
- __v4du v = (__v4du)_v;
- return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b) && v[2] == __builtin_bit_cast(unsigned long long, c) && v[3] == __builtin_bit_cast(unsigned long long, d);
+ return ((__v4du)_v)[0] == __builtin_bit_cast(unsigned long long, a) && ((__v4du)_v)[1] == __builtin_bit_cast(unsigned long long, b) && ((__v4du)_v)[2] == __builtin_bit_cast(unsigned long long, c) && ((__v4du)_v)[3] == __builtin_bit_cast(unsigned long long, d);
}
#ifdef __SSE2__
constexpr bool match_m256h(__m256h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07,
_Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15) {
- __v16hu v = (__v16hu)_v;
- return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
- v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
- v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15);
+ return ((__v16hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v16hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v16hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v16hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ ((__v16hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v16hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v16hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v16hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ ((__v16hu)_v)[ 8] == __builtin_bit_cast(unsigned short, __e08) && ((__v16hu)_v)[ 9] == __builtin_bit_cast(unsigned short, __e09) && ((__v16hu)_v)[10] == __builtin_bit_cast(unsigned short, __e10) && ((__v16hu)_v)[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ ((__v16hu)_v)[12] == __builtin_bit_cast(unsigned short, __e12) && ((__v16hu)_v)[13] == __builtin_bit_cast(unsigned short, __e13) && ((__v16hu)_v)[14] == __builtin_bit_cast(unsigned short, __e14) && ((__v16hu)_v)[15] == __builtin_bit_cast(unsigned short, __e15);
}
#endif
constexpr bool match_m256i(__m256i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d) {
- __v4du v = (__v4du)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4du)_v)[0] == a && ((__v4du)_v)[1] == b && ((__v4du)_v)[2] == c && ((__v4du)_v)[3] == d;
}
constexpr bool match_v4di(__m256i _v, long long a, long long b, long long c, long long d) {
- __v4di v = (__v4di)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+ return ((__v4di)_v)[0] == a && ((__v4di)_v)[1] == b && ((__v4di)_v)[2] == c && ((__v4di)_v)[3] == d;
}
constexpr bool match_v8si(__m256i _v, int a, int b, int c, int d, int e, int f, int g, int h) {
- __v8si v = (__v8si)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8si)_v)[0] == a && ((__v8si)_v)[1] == b && ((__v8si)_v)[2] == c && ((__v8si)_v)[3] == d && ((__v8si)_v)[4] == e && ((__v8si)_v)[5] == f && ((__v8si)_v)[6] == g && ((__v8si)_v)[7] == h;
}
constexpr bool match_v8su(__m256i _v, unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f, unsigned g, unsigned h) {
- __v8su v = (__v8su)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8su)_v)[0] == a && ((__v8su)_v)[1] == b && ((__v8su)_v)[2] == c && ((__v8su)_v)[3] == d && ((__v8su)_v)[4] == e && ((__v8su)_v)[5] == f && ((__v8su)_v)[6] == g && ((__v8su)_v)[7] == h;
}
constexpr bool match_v16hi(__m256i _v, short a, short b, short c, short d, short e, short f, short g, short h, short i, short j, short k, short l, short m, short n, short o, short p) {
- __v16hi v = (__v16hi)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+ return ((__v16hi)_v)[0] == a && ((__v16hi)_v)[1] == b && ((__v16hi)_v)[2] == c && ((__v16hi)_v)[3] == d && ((__v16hi)_v)[4] == e && ((__v16hi)_v)[5] == f && ((__v16hi)_v)[6] == g && ((__v16hi)_v)[7] == h && ((__v16hi)_v)[8] == i && ((__v16hi)_v)[9] == j && ((__v16hi)_v)[10] == k && ((__v16hi)_v)[11] == l && ((__v16hi)_v)[12] == m && ((__v16hi)_v)[13] == n && ((__v16hi)_v)[14] == o && ((__v16hi)_v)[15] == p;
}
constexpr bool match_v16hu(__m256i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h, unsigned short i, unsigned short j, unsigned short k, unsigned short l, unsigned short m, unsigned short n, unsigned short o, unsigned short p) {
- __v16hu v = (__v16hu)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+ return ((__v16hu)_v)[0] == a && ((__v16hu)_v)[1] == b && ((__v16hu)_v)[2] == c && ((__v16hu)_v)[3] == d && ((__v16hu)_v)[4] == e && ((__v16hu)_v)[5] == f && ((__v16hu)_v)[6] == g && ((__v16hu)_v)[7] == h && ((__v16hu)_v)[8] == i && ((__v16hu)_v)[9] == j && ((__v16hu)_v)[10] == k && ((__v16hu)_v)[11] == l && ((__v16hu)_v)[12] == m && ((__v16hu)_v)[13] == n && ((__v16hu)_v)[14] == o && ((__v16hu)_v)[15] == p;
}
constexpr bool match_v32qi(__m256i _v, signed char __b00, signed char __b01, signed char __b02, signed char __b03, signed char __b04, signed char __b05, signed char __b06, signed char __b07,
signed char __b08, signed char __b09, signed char __b10, signed char __b11, signed char __b12, signed char __b13, signed char __b14, signed char __b15,
signed char __b16, signed char __b17, signed char __b18, signed char __b19, signed char __b20, signed char __b21, signed char __b22, signed char __b23,
signed char __b24, signed char __b25, signed char __b26, signed char __b27, signed char __b28, signed char __b29, signed char __b30, signed char __b31) {
- __v32qs v = (__v32qs)_v;
- return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
- v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
- v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
- v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
+ return ((__v32qs)_v)[ 0] == __b00 && ((__v32qs)_v)[ 1] == __b01 && ((__v32qs)_v)[ 2] == __b02 && ((__v32qs)_v)[ 3] == __b03 && ((__v32qs)_v)[ 4] == __b04 && ((__v32qs)_v)[ 5] == __b05 && ((__v32qs)_v)[ 6] == __b06 && ((__v32qs)_v)[ 7] == __b07 &&
+ ((__v32qs)_v)[ 8] == __b08 && ((__v32qs)_v)[ 9] == __b09 && ((__v32qs)_v)[10] == __b10 && ((__v32qs)_v)[11] == __b11 && ((__v32qs)_v)[12] == __b12 && ((__v32qs)_v)[13] == __b13 && ((__v32qs)_v)[14] == __b14 && ((__v32qs)_v)[15] == __b15 &&
+ ((__v32qs)_v)[16] == __b16 && ((__v32qs)_v)[17] == __b17 && ((__v32qs)_v)[18] == __b18 && ((__v32qs)_v)[19] == __b19 && ((__v32qs)_v)[20] == __b20 && ((__v32qs)_v)[21] == __b21 && ((__v32qs)_v)[22] == __b22 && ((__v32qs)_v)[23] == __b23 &&
+ ((__v32qs)_v)[24] == __b24 && ((__v32qs)_v)[25] == __b25 && ((__v32qs)_v)[26] == __b26 && ((__v32qs)_v)[27] == __b27 && ((__v32qs)_v)[28] == __b28 && ((__v32qs)_v)[29] == __b29 && ((__v32qs)_v)[30] == __b30 && ((__v32qs)_v)[31] == __b31;
}
constexpr bool match_v32qu(__m256i _v, unsigned char __b00, unsigned char __b01, unsigned char __b02, unsigned char __b03, unsigned char __b04, unsigned char __b05, unsigned char __b06, unsigned char __b07,
unsigned char __b08, unsigned char __b09, unsigned char __b10, unsigned char __b11, unsigned char __b12, unsigned char __b13, unsigned char __b14, unsigned char __b15,
unsigned char __b16, unsigned char __b17, unsigned char __b18, unsigned char __b19, unsigned char __b20, unsigned char __b21, unsigned char __b22, unsigned char __b23,
unsigned char __b24, unsigned char __b25, unsigned char __b26, unsigned char __b27, unsigned char __b28, unsigned char __b29, unsigned char __b30, unsigned char __b31) {
- __v32qu v = (__v32qu)_v;
- return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
- v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
- v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
- v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
+ return ((__v32qu)_v)[ 0] == __b00 && ((__v32qu)_v)[ 1] == __b01 && ((__v32qu)_v)[ 2] == __b02 && ((__v32qu)_v)[ 3] == __b03 && ((__v32qu)_v)[ 4] == __b04 && ((__v32qu)_v)[ 5] == __b05 && ((__v32qu)_v)[ 6] == __b06 && ((__v32qu)_v)[ 7] == __b07 &&
+ ((__v32qu)_v)[ 8] == __b08 && ((__v32qu)_v)[ 9] == __b09 && ((__v32qu)_v)[10] == __b10 && ((__v32qu)_v)[11] == __b11 && ((__v32qu)_v)[12] == __b12 && ((__v32qu)_v)[13] == __b13 && ((__v32qu)_v)[14] == __b14 && ((__v32qu)_v)[15] == __b15 &&
+ ((__v32qu)_v)[16] == __b16 && ((__v32qu)_v)[17] == __b17 && ((__v32qu)_v)[18] == __b18 && ((__v32qu)_v)[19] == __b19 && ((__v32qu)_v)[20] == __b20 && ((__v32qu)_v)[21] == __b21 && ((__v32qu)_v)[22] == __b22 && ((__v32qu)_v)[23] == __b23 &&
+ ((__v32qu)_v)[24] == __b24 && ((__v32qu)_v)[25] == __b25 && ((__v32qu)_v)[26] == __b26 && ((__v32qu)_v)[27] == __b27 && ((__v32qu)_v)[28] == __b28 && ((__v32qu)_v)[29] == __b29 && ((__v32qu)_v)[30] == __b30 && ((__v32qu)_v)[31] == __b31;
}
constexpr bool match_m512(__m512 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07, float __e08, float __e09, float __e10, float __e11, float __e12, float __e13, float __e14, float __e15) {
- __v16su v = (__v16su)_v;
- return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07) &&
- v[ 8] == __builtin_bit_cast(unsigned, __e08) && v[ 9] == __builtin_bit_cast(unsigned, __e09) && v[10] == __builtin_bit_cast(unsigned, __e10) && v[11] == __builtin_bit_cast(unsigned, __e11) &&
- v[12] == __builtin_bit_cast(unsigned, __e12) && v[13] == __builtin_bit_cast(unsigned, __e13) && v[14] == __builtin_bit_cast(unsigned, __e14) && v[15] == __builtin_bit_cast(unsigned, __e15);
+ return ((__v16su)_v)[ 0] == __builtin_bit_cast(unsigned, __e00) && ((__v16su)_v)[ 1] == __builtin_bit_cast(unsigned, __e01) && ((__v16su)_v)[ 2] == __builtin_bit_cast(unsigned, __e02) && ((__v16su)_v)[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ ((__v16su)_v)[ 4] == __builtin_bit_cast(unsigned, __e04) && ((__v16su)_v)[ 5] == __builtin_bit_cast(unsigned, __e05) && ((__v16su)_v)[ 6] == __builtin_bit_cast(unsigned, __e06) && ((__v16su)_v)[ 7] == __builtin_bit_cast(unsigned, __e07) &&
+ ((__v16su)_v)[ 8] == __builtin_bit_cast(unsigned, __e08) && ((__v16su)_v)[ 9] == __builtin_bit_cast(unsigned, __e09) && ((__v16su)_v)[10] == __builtin_bit_cast(unsigned, __e10) && ((__v16su)_v)[11] == __builtin_bit_cast(unsigned, __e11) &&
+ ((__v16su)_v)[12] == __builtin_bit_cast(unsigned, __e12) && ((__v16su)_v)[13] == __builtin_bit_cast(unsigned, __e13) && ((__v16su)_v)[14] == __builtin_bit_cast(unsigned, __e14) && ((__v16su)_v)[15] == __builtin_bit_cast(unsigned, __e15);
}
constexpr bool match_m512d(__m512d _v, double __e00, double __e01, double __e02, double __e03, double __e04, double __e05, double __e06, double __e07) {
- __v8du v = (__v8du)_v;
- return v[ 0] == __builtin_bit_cast(unsigned long long, __e00) && v[ 1] == __builtin_bit_cast(unsigned long long, __e01) && v[ 2] == __builtin_bit_cast(unsigned long long, __e02) && v[ 3] == __builtin_bit_cast(unsigned long long, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned long long, __e04) && v[ 5] == __builtin_bit_cast(unsigned long long, __e05) && v[ 6] == __builtin_bit_cast(unsigned long long, __e06) && v[ 7] == __builtin_bit_cast(unsigned long long, __e07);
+ return ((__v8du)_v)[ 0] == __builtin_bit_cast(unsigned long long, __e00) && ((__v8du)_v)[ 1] == __builtin_bit_cast(unsigned long long, __e01) && ((__v8du)_v)[ 2] == __builtin_bit_cast(unsigned long long, __e02) && ((__v8du)_v)[ 3] == __builtin_bit_cast(unsigned long long, __e03) &&
+ ((__v8du)_v)[ 4] == __builtin_bit_cast(unsigned long long, __e04) && ((__v8du)_v)[ 5] == __builtin_bit_cast(unsigned long long, __e05) && ((__v8du)_v)[ 6] == __builtin_bit_cast(unsigned long long, __e06) && ((__v8du)_v)[ 7] == __builtin_bit_cast(unsigned long long, __e07);
}
#ifdef __SSE2__
@@ -203,53 +177,47 @@ constexpr bool match_m512h(__m512h _v, _Float16 __e00, _Float16 __e01, _Float16
_Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15,
_Float16 __e16, _Float16 __e17, _Float16 __e18, _Float16 __e19, _Float16 __e20, _Float16 __e21, _Float16 __e22, _Float16 __e23,
_Float16 __e24, _Float16 __e25, _Float16 __e26, _Float16 __e27, _Float16 __e28, _Float16 __e29, _Float16 __e30, _Float16 __e31) {
- __v32hu v = (__v32hu)_v;
- return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
- v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
- v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15) &&
- v[16] == __builtin_bit_cast(unsigned short, __e16) && v[17] == __builtin_bit_cast(unsigned short, __e17) && v[18] == __builtin_bit_cast(unsigned short, __e18) && v[19] == __builtin_bit_cast(unsigned short, __e19) &&
- v[20] == __builtin_bit_cast(unsigned short, __e20) && v[21] == __builtin_bit_cast(unsigned short, __e21) && v[22] == __builtin_bit_cast(unsigned short, __e22) && v[23] == __builtin_bit_cast(unsigned short, __e23) &&
- v[24] == __builtin_bit_cast(unsigned short, __e24) && v[25] == __builtin_bit_cast(unsigned short, __e25) && v[26] == __builtin_bit_cast(unsigned short, __e26) && v[27] == __builtin_bit_cast(unsigned short, __e27) &&
- v[28] == __builtin_bit_cast(unsigned short, __e28) && v[29] == __builtin_bit_cast(unsigned short, __e29) && v[30] == __builtin_bit_cast(unsigned short, __e30) && v[31] == __builtin_bit_cast(unsigned short, __e31);
+ return ((__v32hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v32hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v32hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v32hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ ((__v32hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v32hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v32hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v32hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ ((__v32hu)_v)[ 8] == __builtin_bit_cast(unsigned short, __e08) && ((__v32hu)_v)[ 9] == __builtin_bit_cast(unsigned short, __e09) && ((__v32hu)_v)[10] == __builtin_bit_cast(unsigned short, __e10) && ((__v32hu)_v)[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ ((__v32hu)_v)[12] == __builtin_bit_cast(unsigned short, __e12) && ((__v32hu)_v)[13] == __builtin_bit_cast(unsigned short, __e13) && ((__v32hu)_v)[14] == __builtin_bit_cast(unsigned short, __e14) && ((__v32hu)_v)[15] == __builtin_bit_cast(unsigned short, __e15) &&
+ ((__v32hu)_v)[16] == __builtin_bit_cast(unsigned short, __e16) && ((__v32hu)_v)[17] == __builtin_bit_cast(unsigned short, __e17) && ((__v32hu)_v)[18] == __builtin_bit_cast(unsigned short, __e18) && ((__v32hu)_v)[19] == __builtin_bit_cast(unsigned short, __e19) &&
+ ((__v32hu)_v)[20] == __builtin_bit_cast(unsigned short, __e20) && ((__v32hu)_v)[21] == __builtin_bit_cast(unsigned short, __e21) && ((__v32hu)_v)[22] == __builtin_bit_cast(unsigned short, __e22) && ((__v32hu)_v)[23] == __builtin_bit_cast(unsigned short, __e23) &&
+ ((__v32hu)_v)[24] == __builtin_bit_cast(unsigned short, __e24) && ((__v32hu)_v)[25] == __builtin_bit_cast(unsigned short, __e25) && ((__v32hu)_v)[26] == __builtin_bit_cast(unsigned short, __e26) && ((__v32hu)_v)[27] == __builtin_bit_cast(unsigned short, __e27) &&
+ ((__v32hu)_v)[28] == __builtin_bit_cast(unsigned short, __e28) && ((__v32hu)_v)[29] == __builtin_bit_cast(unsigned short, __e29) && ((__v32hu)_v)[30] == __builtin_bit_cast(unsigned short, __e30) && ((__v32hu)_v)[31] == __builtin_bit_cast(unsigned short, __e31);
}
#endif
constexpr bool match_m512i(__m512i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d, unsigned long long e, unsigned long long f, unsigned long long g, unsigned long long h) {
- __v8du v = (__v8du)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8du)_v)[0] == a && ((__v8du)_v)[1] == b && ((__v8du)_v)[2] == c && ((__v8du)_v)[3] == d && ((__v8du)_v)[4] == e && ((__v8du)_v)[5] == f && ((__v8du)_v)[6] == g && ((__v8du)_v)[7] == h;
}
constexpr bool match_v8di(__m512i _v, long long a, long long b, long long c, long long d, long long e, long long f, long long g, long long h) {
- __v8di v = (__v8di)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+ return ((__v8di)_v)[0] == a && ((__v8di)_v)[1] == b && ((__v8di)_v)[2] == c && ((__v8di)_v)[3] == d && ((__v8di)_v)[4] == e && ((__v8di)_v)[5] == f && ((__v8di)_v)[6] == g && ((__v8di)_v)[7] == h;
}
constexpr bool match_v16si(__m512i _v, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n, int o, int p) {
- __v16si v = (__v16si)_v;
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+ return ((__v16si)_v)[0] == a && ((__v16si)_v)[1] == b && ((__v16si)_v)[2] == c && ((__v16si)_v)[3] == d && ((__v16si)_v)[4] == e && ((__v16si)_v)[5] == f && ((__v16si)_v)[6] == g && ((__v16si)_v)[7] == h && ((__v16si)_v)[8] == i && ((__v16si)_v)[9] == j && ((__v16si)_v)[10] == k && ((__v16si)_v)[11] == l && ((__v16si)_v)[12] == m && ((__v16si)_v)[13] == n && ((__v16si)_v)[14] == o && ((__v16si)_v)[15] == p;
}
constexpr bool match_v32hi(__m512i _v, short __e00, short __e01, short __e02, short __e03, short __e04, short __e05, short __e06, short __e07,
short __e08, short __e09, short __e10, short __e11, short __e12, short __e13, short __e14, short __e15,
short __e16, short __e17, short __e18, short __e19, short __e20, short __e21, short __e22, short __e23,
short __e24, short __e25, short __e26, short __e27, short __e28, short __e29, short __e30, short __e31) {
- __v32hi v = (__v32hi)_v;
- return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
- v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
- v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
- v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
+ return ((__v32hi)_v)[ 0] == __e00 && ((__v32hi)_v)[ 1] == __e01 && ((__v32hi)_v)[ 2] == __e02 && ((__v32hi)_v)[ 3] == __e03 && ((__v32hi)_v)[ 4] == __e04 && ((__v32hi)_v)[ 5] == __e05 && ((__v32hi)_v)[ 6] == __e06 && ((__v32hi)_v)[ 7] == __e07 &&
+ ((__v32hi)_v)[ 8] == __e08 && ((__v32hi)_v)[ 9] == __e09 && ((__v32hi)_v)[10] == __e10 && ((__v32hi)_v)[11] == __e11 && ((__v32hi)_v)[12] == __e12 && ((__v32hi)_v)[13] == __e13 && ((__v32hi)_v)[14] == __e14 && ((__v32hi)_v)[15] == __e15 &&
+ ((__v32hi)_v)[16] == __e16 && ((__v32hi)_v)[17] == __e17 && ((__v32hi)_v)[18] == __e18 && ((__v32hi)_v)[19] == __e19 && ((__v32hi)_v)[20] == __e20 && ((__v32hi)_v)[21] == __e21 && ((__v32hi)_v)[22] == __e22 && ((__v32hi)_v)[23] == __e23 &&
+ ((__v32hi)_v)[24] == __e24 && ((__v32hi)_v)[25] == __e25 && ((__v32hi)_v)[26] == __e26 && ((__v32hi)_v)[27] == __e27 && ((__v32hi)_v)[28] == __e28 && ((__v32hi)_v)[29] == __e29 && ((__v32hi)_v)[30] == __e30 && ((__v32hi)_v)[31] == __e31;
}
constexpr bool match_v32hu(__m512i _v, unsigned short __e00, unsigned short __e01, unsigned short __e02, unsigned short __e03, unsigned short __e04, unsigned short __e05, unsigned short __e06, unsigned short __e07,
unsigned short __e08, unsigned short __e09, unsigned short __e10, unsigned short __e11, unsigned short __e12, unsigned short __e13, unsigned short __e14, unsigned short __e15,
unsigned short __e16, unsigned short __e17, unsigned short __e18, unsigned short __e19, unsigned short __e20, unsigned short __e21, unsigned short __e22, unsigned short __e23,
unsigned short __e24, unsigned short __e25, unsigned short __e26, unsigned short __e27, unsigned short __e28, unsigned short __e29, unsigned short __e30, unsigned short __e31) {
- __v32hu v = (__v32hu)_v;
- return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
- v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
- v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
- v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
+ return ((__v32hu)_v)[ 0] == __e00 && ((__v32hu)_v)[ 1] == __e01 && ((__v32hu)_v)[ 2] == __e02 && ((__v32hu)_v)[ 3] == __e03 && ((__v32hu)_v)[ 4] == __e04 && ((__v32hu)_v)[ 5] == __e05 && ((__v32hu)_v)[ 6] == __e06 && ((__v32hu)_v)[ 7] == __e07 &&
+ ((__v32hu)_v)[ 8] == __e08 && ((__v32hu)_v)[ 9] == __e09 && ((__v32hu)_v)[10] == __e10 && ((__v32hu)_v)[11] == __e11 && ((__v32hu)_v)[12] == __e12 && ((__v32hu)_v)[13] == __e13 && ((__v32hu)_v)[14] == __e14 && ((__v32hu)_v)[15] == __e15 &&
+ ((__v32hu)_v)[16] == __e16 && ((__v32hu)_v)[17] == __e17 && ((__v32hu)_v)[18] == __e18 && ((__v32hu)_v)[19] == __e19 && ((__v32hu)_v)[20] == __e20 && ((__v32hu)_v)[21] == __e21 && ((__v32hu)_v)[22] == __e22 && ((__v32hu)_v)[23] == __e23 &&
+ ((__v32hu)_v)[24] == __e24 && ((__v32hu)_v)[25] == __e25 && ((__v32hu)_v)[26] == __e26 && ((__v32hu)_v)[27] == __e27 && ((__v32hu)_v)[28] == __e28 && ((__v32hu)_v)[29] == __e29 && ((__v32hu)_v)[30] == __e30 && ((__v32hu)_v)[31] == __e31;
}
constexpr bool match_v64qi(__m512i _v, signed char __e00, signed char __e01, signed char __e02, signed char __e03, signed char __e04, signed char __e05, signed char __e06, signed char __e07,
@@ -260,15 +228,14 @@ constexpr bool match_v64qi(__m512i _v, signed char __e00, signed char __e01, sig
signed char __e40, signed char __e41, signed char __e42, signed char __e43, signed char __e44, signed char __e45, signed char __e46, signed char __e47,
signed char __e48, signed char __e49, signed char __e50, signed char __e51, signed char __e52, signed char __e53, signed char __e54, signed char __e55,
signed char __e56, signed char __e57, signed char __e58, signed char __e59, signed char __e60, signed char __e61, signed char __e62, signed char __e63) {
- __v64qs v = (__v64qs)_v;
- return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
- v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
- v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
- v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
- v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
- v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
- v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
- v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
+ return ((__v64qs)_v)[ 0] == __e00 && ((__v64qs)_v)[ 1] == __e01 && ((__v64qs)_v)[ 2] == __e02 && ((__v64qs)_v)[ 3] == __e03 && ((__v64qs)_v)[ 4] == __e04 && ((__v64qs)_v)[ 5] == __e05 && ((__v64qs)_v)[ 6] == __e06 && ((__v64qs)_v)[ 7] == __e07 &&
+ ((__v64qs)_v)[ 8] == __e08 && ((__v64qs)_v)[ 9] == __e09 && ((__v64qs)_v)[10] == __e10 && ((__v64qs)_v)[11] == __e11 && ((__v64qs)_v)[12] == __e12 && ((__v64qs)_v)[13] == __e13 && ((__v64qs)_v)[14] == __e14 && ((__v64qs)_v)[15] == __e15 &&
+ ((__v64qs)_v)[16] == __e16 && ((__v64qs)_v)[17] == __e17 && ((__v64qs)_v)[18] == __e18 && ((__v64qs)_v)[19] == __e19 && ((__v64qs)_v)[20] == __e20 && ((__v64qs)_v)[21] == __e21 && ((__v64qs)_v)[22] == __e22 && ((__v64qs)_v)[23] == __e23 &&
+ ((__v64qs)_v)[24] == __e24 && ((__v64qs)_v)[25] == __e25 && ((__v64qs)_v)[26] == __e26 && ((__v64qs)_v)[27] == __e27 && ((__v64qs)_v)[28] == __e28 && ((__v64qs)_v)[29] == __e29 && ((__v64qs)_v)[30] == __e30 && ((__v64qs)_v)[31] == __e31 &&
+ ((__v64qs)_v)[32] == __e32 && ((__v64qs)_v)[33] == __e33 && ((__v64qs)_v)[34] == __e34 && ((__v64qs)_v)[35] == __e35 && ((__v64qs)_v)[36] == __e36 && ((__v64qs)_v)[37] == __e37 && ((__v64qs)_v)[38] == __e38 && ((__v64qs)_v)[39] == __e39 &&
+ ((__v64qs)_v)[40] == __e40 && ((__v64qs)_v)[41] == __e41 && ((__v64qs)_v)[42] == __e42 && ((__v64qs)_v)[43] == __e43 && ((__v64qs)_v)[44] == __e44 && ((__v64qs)_v)[45] == __e45 && ((__v64qs)_v)[46] == __e46 && ((__v64qs)_v)[47] == __e47 &&
+ ((__v64qs)_v)[48] == __e48 && ((__v64qs)_v)[49] == __e49 && ((__v64qs)_v)[50] == __e50 && ((__v64qs)_v)[51] == __e51 && ((__v64qs)_v)[52] == __e52 && ((__v64qs)_v)[53] == __e53 && ((__v64qs)_v)[54] == __e54 && ((__v64qs)_v)[55] == __e55 &&
+ ((__v64qs)_v)[56] == __e56 && ((__v64qs)_v)[57] == __e57 && ((__v64qs)_v)[58] == __e58 && ((__v64qs)_v)[59] == __e59 && ((__v64qs)_v)[60] == __e60 && ((__v64qs)_v)[61] == __e61 && ((__v64qs)_v)[62] == __e62 && ((__v64qs)_v)[63] == __e63;
}
constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01, unsigned char __e02, unsigned char __e03, unsigned char __e04, unsigned char __e05, unsigned char __e06, unsigned char __e07,
@@ -279,18 +246,16 @@ constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01,
unsigned char __e40, unsigned char __e41, unsigned char __e42, unsigned char __e43, unsigned char __e44, unsigned char __e45, unsigned char __e46, unsigned char __e47,
unsigned char __e48, unsigned char __e49, unsigned char __e50, unsigned char __e51, unsigned char __e52, unsigned char __e53, unsigned char __e54, unsigned char __e55,
unsigned char __e56, unsigned char __e57, unsigned char __e58, unsigned char __e59, unsigned char __e60, unsigned char __e61, unsigned char __e62, unsigned char __e63) {
- __v64qu v = (__v64qu)_v;
- return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
- v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
- v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
- v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
- v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
- v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
- v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
- v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
+ return ((__v64qu)_v)[ 0] == __e00 && ((__v64qu)_v)[ 1] == __e01 && ((__v64qu)_v)[ 2] == __e02 && ((__v64qu)_v)[ 3] == __e03 && ((__v64qu)_v)[ 4] == __e04 && ((__v64qu)_v)[ 5] == __e05 && ((__v64qu)_v)[ 6] == __e06 && ((__v64qu)_v)[ 7] == __e07 &&
+ ((__v64qu)_v)[ 8] == __e08 && ((__v64qu)_v)[ 9] == __e09 && ((__v64qu)_v)[10] == __e10 && ((__v64qu)_v)[11] == __e11 && ((__v64qu)_v)[12] == __e12 && ((__v64qu)_v)[13] == __e13 && ((__v64qu)_v)[14] == __e14 && ((__v64qu)_v)[15] == __e15 &&
+ ((__v64qu)_v)[16] == __e16 && ((__v64qu)_v)[17] == __e17 && ((__v64qu)_v)[18] == __e18 && ((__v64qu)_v)[19] == __e19 && ((__v64qu)_v)[20] == __e20 && ((__v64qu)_v)[21] == __e21 && ((__v64qu)_v)[22] == __e22 && ((__v64qu)_v)[23] == __e23 &&
+ ((__v64qu)_v)[24] == __e24 && ((__v64qu)_v)[25] == __e25 && ((__v64qu)_v)[26] == __e26 && ((__v64qu)_v)[27] == __e27 && ((__v64qu)_v)[28] == __e28 && ((__v64qu)_v)[29] == __e29 && ((__v64qu)_v)[30] == __e30 && ((__v64qu)_v)[31] == __e31 &&
+ ((__v64qu)_v)[32] == __e32 && ((__v64qu)_v)[33] == __e33 && ((__v64qu)_v)[34] == __e34 && ((__v64qu)_v)[35] == __e35 && ((__v64qu)_v)[36] == __e36 && ((__v64qu)_v)[37] == __e37 && ((__v64qu)_v)[38] == __e38 && ((__v64qu)_v)[39] == __e39 &&
+ ((__v64qu)_v)[40] == __e40 && ((__v64qu)_v)[41] == __e41 && ((__v64qu)_v)[42] == __e42 && ((__v64qu)_v)[43] == __e43 && ((__v64qu)_v)[44] == __e44 && ((__v64qu)_v)[45] == __e45 && ((__v64qu)_v)[46] == __e46 && ((__v64qu)_v)[47] == __e47 &&
+ ((__v64qu)_v)[48] == __e48 && ((__v64qu)_v)[49] == __e49 && ((__v64qu)_v)[50] == __e50 && ((__v64qu)_v)[51] == __e51 && ((__v64qu)_v)[52] == __e52 && ((__v64qu)_v)[53] == __e53 && ((__v64qu)_v)[54] == __e54 && ((__v64qu)_v)[55] == __e55 &&
+ ((__v64qu)_v)[56] == __e56 && ((__v64qu)_v)[57] == __e57 && ((__v64qu)_v)[58] == __e58 && ((__v64qu)_v)[59] == __e59 && ((__v64qu)_v)[60] == __e60 && ((__v64qu)_v)[61] == __e61 && ((__v64qu)_v)[62] == __e62 && ((__v64qu)_v)[63] == __e63;
}
-#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
#else
>From 9ed1b0e601a8b4b9986ec12a0b54bdff0ea57392 Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Mon, 1 Sep 2025 12:46:29 +0300
Subject: [PATCH 5/7] Refactor: Move constexpr tests next to their respective
functions
---
clang/test/CodeGen/X86/bmi-builtins.c | 201 +++++++++-------
clang/test/CodeGen/X86/builtin_test_helpers.h | 215 ++++++++++--------
2 files changed, 241 insertions(+), 175 deletions(-)
diff --git a/clang/test/CodeGen/X86/bmi-builtins.c b/clang/test/CodeGen/X86/bmi-builtins.c
index a68853f595f9d..68e114b8b39bc 100644
--- a/clang/test/CodeGen/X86/bmi-builtins.c
+++ b/clang/test/CodeGen/X86/bmi-builtins.c
@@ -22,30 +22,55 @@ unsigned short test_tzcnt_u16(unsigned short __X) {
// TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false)
return _tzcnt_u16(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_tzcnt_u16(0x0000) == 16);
+TEST_CONSTEXPR(_tzcnt_u16(0x0001) == 0);
+TEST_CONSTEXPR(_tzcnt_u16(0x0010) == 4);
+#endif
unsigned short test__tzcnt_u16(unsigned short __X) {
// TZCNT-LABEL: test__tzcnt_u16
// TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false)
return __tzcnt_u16(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__tzcnt_u16(0x0000) == 16);
+TEST_CONSTEXPR(__tzcnt_u16(0x0001) == 0);
+TEST_CONSTEXPR(__tzcnt_u16(0x0010) == 4);
+#endif
unsigned int test__tzcnt_u32(unsigned int __X) {
// TZCNT-LABEL: test__tzcnt_u32
// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false)
return __tzcnt_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__tzcnt_u32(0x00000000) == 32);
+TEST_CONSTEXPR(__tzcnt_u32(0x00000001) == 0);
+TEST_CONSTEXPR(__tzcnt_u32(0x00000080) == 7);
+#endif
int test_mm_tzcnt_32(unsigned int __X) {
// TZCNT-LABEL: test_mm_tzcnt_32
// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false)
return _mm_tzcnt_32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000000) == 32);
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000001) == 0);
+TEST_CONSTEXPR(_mm_tzcnt_32(0x00000080) == 7);
+#endif
unsigned int test_tzcnt_u32(unsigned int __X) {
// TZCNT-LABEL: test_tzcnt_u32
// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false)
return _tzcnt_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_tzcnt_u32(0x00000000) == 32);
+TEST_CONSTEXPR(_tzcnt_u32(0x00000001) == 0);
+TEST_CONSTEXPR(_tzcnt_u32(0x00000080) == 7);
+#endif
#ifdef __x86_64__
unsigned long long test__tzcnt_u64(unsigned long long __X) {
@@ -53,18 +78,33 @@ unsigned long long test__tzcnt_u64(unsigned long long __X) {
// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false)
return __tzcnt_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(__tzcnt_u64(0x0000000800000000ULL) == 35);
+#endif
long long test_mm_tzcnt_64(unsigned long long __X) {
// TZCNT-LABEL: test_mm_tzcnt_64
// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false)
return _mm_tzcnt_64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000800000000ULL) == 35);
+#endif
unsigned long long test_tzcnt_u64(unsigned long long __X) {
// TZCNT-LABEL: test_tzcnt_u64
// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false)
return _tzcnt_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000000ULL) == 64);
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000001ULL) == 0);
+TEST_CONSTEXPR(_tzcnt_u64(0x0000000800000000ULL) == 35);
+#endif
#endif
#if !defined(TEST_TZCNT)
@@ -74,12 +114,20 @@ unsigned int test__andn_u32(unsigned int __X, unsigned int __Y) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return __andn_u32(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
+#endif
unsigned int test__bextr_u32(unsigned int __X, unsigned int __Y) {
// CHECK-LABEL: test__bextr_u32
// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}})
return __bextr_u32(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__bextr_u32(0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
+TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
+#endif
unsigned int test__blsi_u32(unsigned int __X) {
// CHECK-LABEL: test__blsi_u32
@@ -87,6 +135,9 @@ unsigned int test__blsi_u32(unsigned int __X) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return __blsi_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
+#endif
unsigned int test__blsmsk_u32(unsigned int __X) {
// CHECK-LABEL: test__blsmsk_u32
@@ -94,6 +145,9 @@ unsigned int test__blsmsk_u32(unsigned int __X) {
// CHECK: xor i32 %{{.*}}, %{{.*}}
return __blsmsk_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
+#endif
unsigned int test__blsr_u32(unsigned int __X) {
// CHECK-LABEL: test__blsr_u32
@@ -101,6 +155,9 @@ unsigned int test__blsr_u32(unsigned int __X) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return __blsr_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
+#endif
#ifdef __x86_64__
unsigned long long test__andn_u64(unsigned long __X, unsigned long __Y) {
@@ -109,12 +166,20 @@ unsigned long long test__andn_u64(unsigned long __X, unsigned long __Y) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return __andn_u64(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
+#endif
unsigned long long test__bextr_u64(unsigned long __X, unsigned long __Y) {
// CHECK-LABEL: test__bextr_u64
// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}})
return __bextr_u64(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
+#endif
unsigned long long test__blsi_u64(unsigned long long __X) {
// CHECK-LABEL: test__blsi_u64
@@ -122,6 +187,9 @@ unsigned long long test__blsi_u64(unsigned long long __X) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return __blsi_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
+#endif
unsigned long long test__blsmsk_u64(unsigned long long __X) {
// CHECK-LABEL: test__blsmsk_u64
@@ -129,6 +197,9 @@ unsigned long long test__blsmsk_u64(unsigned long long __X) {
// CHECK: xor i64 %{{.*}}, %{{.*}}
return __blsmsk_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
+#endif
unsigned long long test__blsr_u64(unsigned long long __X) {
// CHECK-LABEL: test__blsr_u64
@@ -136,6 +207,9 @@ unsigned long long test__blsr_u64(unsigned long long __X) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return __blsr_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
+#endif
#endif
// Intel intrinsics
@@ -146,6 +220,9 @@ unsigned int test_andn_u32(unsigned int __X, unsigned int __Y) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return _andn_u32(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
+#endif
unsigned int test_bextr_u32(unsigned int __X, unsigned int __Y,
unsigned int __Z) {
@@ -157,12 +234,22 @@ unsigned int test_bextr_u32(unsigned int __X, unsigned int __Y,
// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}})
return _bextr_u32(__X, __Y, __Z);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_bextr_u32(0x00000000, 0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF04, 0xFFFFFF10) == 0x0000003F);
+TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF08, 0xFFFFFF30) == 0x00000003);
+#endif
unsigned int test_bextr2_u32(unsigned int __X, unsigned int __Y) {
// CHECK-LABEL: test_bextr2_u32
// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}})
return _bextr2_u32(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_bextr2_u32(0x00000000, 0x00000000) == 0x00000000);
+TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
+TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
+#endif
unsigned int test_blsi_u32(unsigned int __X) {
// CHECK-LABEL: test_blsi_u32
@@ -170,6 +257,9 @@ unsigned int test_blsi_u32(unsigned int __X) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return _blsi_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
+#endif
unsigned int test_blsmsk_u32(unsigned int __X) {
// CHECK-LABEL: test_blsmsk_u32
@@ -177,6 +267,9 @@ unsigned int test_blsmsk_u32(unsigned int __X) {
// CHECK: xor i32 %{{.*}}, %{{.*}}
return _blsmsk_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
+#endif
unsigned int test_blsr_u32(unsigned int __X) {
// CHECK-LABEL: test_blsr_u32
@@ -184,6 +277,9 @@ unsigned int test_blsr_u32(unsigned int __X) {
// CHECK: and i32 %{{.*}}, %{{.*}}
return _blsr_u32(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
+#endif
#ifdef __x86_64__
unsigned long long test_andn_u64(unsigned long __X, unsigned long __Y) {
@@ -192,6 +288,9 @@ unsigned long long test_andn_u64(unsigned long __X, unsigned long __Y) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return _andn_u64(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
+#endif
unsigned long long test_bextr_u64(unsigned long __X, unsigned int __Y,
unsigned int __Z) {
@@ -204,6 +303,11 @@ unsigned long long test_bextr_u64(unsigned long __X, unsigned int __Y,
// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}})
return _bextr_u64(__X, __Y, __Z);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0x0000000000000001ULL, 0x0000000000000040ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFFFF01ULL, 0xFFFFFFFFFFFFFF10ULL) == 0x0000000000000000ULL);
+#endif
unsigned long long test_bextr2_u64(unsigned long long __X,
unsigned long long __Y) {
@@ -211,6 +315,11 @@ unsigned long long test_bextr2_u64(unsigned long long __X,
// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}})
return _bextr2_u64(__X, __Y);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_bextr2_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
+TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
+TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
+#endif
unsigned long long test_blsi_u64(unsigned long long __X) {
// CHECK-LABEL: test_blsi_u64
@@ -218,6 +327,9 @@ unsigned long long test_blsi_u64(unsigned long long __X) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return _blsi_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
+#endif
unsigned long long test_blsmsk_u64(unsigned long long __X) {
// CHECK-LABEL: test_blsmsk_u64
@@ -225,6 +337,9 @@ unsigned long long test_blsmsk_u64(unsigned long long __X) {
// CHECK: xor i64 %{{.*}}, %{{.*}}
return _blsmsk_u64(__X);
}
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+TEST_CONSTEXPR(_blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
+#endif
unsigned long long test_blsr_u64(unsigned long long __X) {
// CHECK-LABEL: test_blsr_u64
@@ -232,91 +347,7 @@ unsigned long long test_blsr_u64(unsigned long long __X) {
// CHECK: and i64 %{{.*}}, %{{.*}}
return _blsr_u64(__X);
}
-#endif
-
-#endif // !defined(TEST_TZCNT)
-
-// Test constexpr handling.
#if defined(__cplusplus) && (__cplusplus >= 201103L)
-TEST_CONSTEXPR(__andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
-TEST_CONSTEXPR(_andn_u32(0x01234567, 0xFECDBA98) == (~0x01234567 & 0xFECDBA98));
-
-TEST_CONSTEXPR(__bextr_u32(0x00000000, 0x00000000) == 0x00000000);
-TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
-TEST_CONSTEXPR(__bextr_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
-
-TEST_CONSTEXPR(_bextr2_u32(0x00000000, 0x00000000) == 0x00000000);
-TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF1004) == 0x0000003F);
-TEST_CONSTEXPR(_bextr2_u32(0x000003F0, 0xFFFF3008) == 0x00000003);
-
-TEST_CONSTEXPR(_bextr_u32(0x00000000, 0x00000000, 0x00000000) == 0x00000000);
-TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF04, 0xFFFFFF10) == 0x0000003F);
-TEST_CONSTEXPR(_bextr_u32(0x000003F0, 0xFFFFFF08, 0xFFFFFF30) == 0x00000003);
-
-TEST_CONSTEXPR(__blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
-TEST_CONSTEXPR(_blsi_u32(0x89ABCDEF) == (0x89ABCDEF & -0x89ABCDEF));
-
-TEST_CONSTEXPR(__blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
-TEST_CONSTEXPR(_blsmsk_u32(0x89ABCDEF) == (0x89ABCDEF ^ (0x89ABCDEF - 1)));
-
-TEST_CONSTEXPR(__blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
-TEST_CONSTEXPR(_blsr_u32(0x89ABCDEF) == (0x89ABCDEF & (0x89ABCDEF - 1)));
-
-TEST_CONSTEXPR(__tzcnt_u16(0x0000) == 16);
-TEST_CONSTEXPR(__tzcnt_u16(0x0001) == 0);
-TEST_CONSTEXPR(__tzcnt_u16(0x0010) == 4);
-
-TEST_CONSTEXPR(_tzcnt_u16(0x0000) == 16);
-TEST_CONSTEXPR(_tzcnt_u16(0x0001) == 0);
-TEST_CONSTEXPR(_tzcnt_u16(0x0010) == 4);
-
-TEST_CONSTEXPR(__tzcnt_u32(0x00000000) == 32);
-TEST_CONSTEXPR(__tzcnt_u32(0x00000001) == 0);
-TEST_CONSTEXPR(__tzcnt_u32(0x00000080) == 7);
-
-TEST_CONSTEXPR(_tzcnt_u32(0x00000000) == 32);
-TEST_CONSTEXPR(_tzcnt_u32(0x00000001) == 0);
-TEST_CONSTEXPR(_tzcnt_u32(0x00000080) == 7);
-
-TEST_CONSTEXPR(_mm_tzcnt_32(0x00000000) == 32);
-TEST_CONSTEXPR(_mm_tzcnt_32(0x00000001) == 0);
-TEST_CONSTEXPR(_mm_tzcnt_32(0x00000080) == 7);
-
-#ifdef __x86_64__
-TEST_CONSTEXPR(__andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
-TEST_CONSTEXPR(_andn_u64(0x0123456789ABCDEFULL, 0xFECDBA9876543210ULL) == (~0x0123456789ABCDEFULL & 0xFECDBA9876543210ULL));
-
-TEST_CONSTEXPR(__bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
-TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
-TEST_CONSTEXPR(__bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
-
-TEST_CONSTEXPR(_bextr2_u64(0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
-TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0x0000000000004001ULL) == 0x7800000000000000ULL);
-TEST_CONSTEXPR(_bextr2_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFF1001ULL) == 0x0000000000000000ULL);
-
-TEST_CONSTEXPR(_bextr_u64(0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL) == 0x0000000000000000ULL);
-TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0x0000000000000001ULL, 0x0000000000000040ULL) == 0x7800000000000000ULL);
-TEST_CONSTEXPR(_bextr_u64(0xF000000000000001ULL, 0xFFFFFFFFFFFFFF01ULL, 0xFFFFFFFFFFFFFF10ULL) == 0x0000000000000000ULL);
-
-TEST_CONSTEXPR(__blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
-TEST_CONSTEXPR(_blsi_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & -0x0123456789ABCDEFULL));
-
-TEST_CONSTEXPR(__blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
-TEST_CONSTEXPR(_blsmsk_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL ^ (0x0123456789ABCDEFULL - 1)));
-
-TEST_CONSTEXPR(__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
TEST_CONSTEXPR(_blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
-
-TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000000ULL) == 64);
-TEST_CONSTEXPR(__tzcnt_u64(0x0000000000000001ULL) == 0);
-TEST_CONSTEXPR(__tzcnt_u64(0x0000000800000000ULL) == 35);
-
-TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000000ULL) == 64);
-TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000001ULL) == 0);
-TEST_CONSTEXPR(_tzcnt_u64(0x0000000800000000ULL) == 35);
-
-TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000000ULL) == 64);
-TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000001ULL) == 0);
-TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000800000000ULL) == 35);
#endif
-#endif
\ No newline at end of file
+#endif // !defined(TEST_TZCNT)
\ No newline at end of file
diff --git a/clang/test/CodeGen/X86/builtin_test_helpers.h b/clang/test/CodeGen/X86/builtin_test_helpers.h
index a761e6daa60e2..2476a2b7c723a 100644
--- a/clang/test/CodeGen/X86/builtin_test_helpers.h
+++ b/clang/test/CodeGen/X86/builtin_test_helpers.h
@@ -4,14 +4,9 @@
#if defined(__cplusplus) && (__cplusplus >= 201103L)
-
-#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
-
-// alL constexpr functions C++11.
-
-
constexpr bool match_m64(__m64 _v, unsigned long long a) {
- return ((__v1du)_v)[0] == a;
+ __v1du v = (__v1du)_v;
+ return v[0] == a;
}
constexpr bool match_v1di(__m64 v, long long a) {
@@ -19,50 +14,61 @@ constexpr bool match_v1di(__m64 v, long long a) {
}
constexpr bool match_v1du(__m64 _v, unsigned long long a) {
- return ((__v1du)_v)[0] == a;
+ __v1du v = (__v1du)_v;
+ return v[0] == a;
}
constexpr bool match_v2si(__m64 _v, int a, int b) {
- return ((__v2si)_v)[0] == a && ((__v2si)_v)[1] == b;
+ __v2si v = (__v2si)_v;
+ return v[0] == a && v[1] == b;
}
constexpr bool match_v2su(__m64 _v, unsigned a, unsigned b) {
- return ((__v2su)_v)[0] == a && ((__v2su)_v)[1] == b;
+ __v2su v = (__v2su)_v;
+ return v[0] == a && v[1] == b;
}
constexpr bool match_v4hi(__m64 _v, short a, short b, short c, short d) {
- return ((__v4hi)_v)[0] == a && ((__v4hi)_v)[1] == b && ((__v4hi)_v)[2] == c && ((__v4hi)_v)[3] == d;
+ __v4hi v = (__v4hi)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v4hu(__m64 _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d) {
- return ((__v4hu)_v)[0] == a && ((__v4hu)_v)[1] == b && ((__v4hu)_v)[2] == c && ((__v4hu)_v)[3] == d;
+ __v4hu v = (__v4hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v8qi(__m64 _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h) {
- return ((__v8qs)_v)[0] == a && ((__v8qs)_v)[1] == b && ((__v8qs)_v)[2] == c && ((__v8qs)_v)[3] == d && ((__v8qs)_v)[4] == e && ((__v8qs)_v)[5] == f && ((__v8qs)_v)[6] == g && ((__v8qs)_v)[7] == h;
+ __v8qs v = (__v8qs)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v8qu(__m64 _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h) {
- return ((__v8qu)_v)[0] == a && ((__v8qu)_v)[1] == b && ((__v8qu)_v)[2] == c && ((__v8qu)_v)[3] == d && ((__v8qu)_v)[4] == e && ((__v8qu)_v)[5] == f && ((__v8qu)_v)[6] == g && ((__v8qu)_v)[7] == h;
+ __v8qu v = (__v8qu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_m128(__m128 _v, float a, float b, float c, float d) {
- return ((__v4su)_v)[0] == __builtin_bit_cast(unsigned, a) && ((__v4su)_v)[1] == __builtin_bit_cast(unsigned, b) && ((__v4su)_v)[2] == __builtin_bit_cast(unsigned, c) && ((__v4su)_v)[3] == __builtin_bit_cast(unsigned, d);
+ __v4su v = (__v4su)_v;
+ return v[0] == __builtin_bit_cast(unsigned, a) && v[1] == __builtin_bit_cast(unsigned, b) && v[2] == __builtin_bit_cast(unsigned, c) && v[3] == __builtin_bit_cast(unsigned, d);
}
constexpr bool match_m128d(__m128d _v, double a, double b) {
- return ((__v2du)_v)[0] == __builtin_bit_cast(unsigned long long, a) && ((__v2du)_v)[1] == __builtin_bit_cast(unsigned long long, b);
+ __v2du v = (__v2du)_v;
+ return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b);
}
#ifdef __SSE2__
constexpr bool match_m128h(__m128h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07) {
- return ((__v8hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v8hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v8hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v8hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- ((__v8hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v8hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v8hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v8hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07);
+ __v8hu v = (__v8hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07);
}
#endif
constexpr bool match_m128i(__m128i _v, unsigned long long a, unsigned long long b) {
- return ((__v2du)_v)[0] == a && ((__v2du)_v)[1] == b;
+ __v2du v = (__v2du)_v;
+ return v[0] == a && v[1] == b;
}
constexpr bool match_v2di(__m128i v, long long a, long long b) {
@@ -70,106 +76,126 @@ constexpr bool match_v2di(__m128i v, long long a, long long b) {
}
constexpr bool match_v2du(__m128i _v, unsigned long long a, unsigned long long b) {
- return ((__v2du)_v)[0] == a && ((__v2du)_v)[1] == b;
+ __v2du v = (__v2du)_v;
+ return v[0] == a && v[1] == b;
}
constexpr bool match_v4si(__m128i _v, int a, int b, int c, int d) {
- return ((__v4si)_v)[0] == a && ((__v4si)_v)[1] == b && ((__v4si)_v)[2] == c && ((__v4si)_v)[3] == d;
+ __v4si v = (__v4si)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v4su(__m128i _v, unsigned a, unsigned b, unsigned c, unsigned d) {
- return ((__v4su)_v)[0] == a && ((__v4su)_v)[1] == b && ((__v4su)_v)[2] == c && ((__v4su)_v)[3] == d;
+ __v4su v = (__v4su)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v8hi(__m128i _v, short a, short b, short c, short d, short e, short f, short g, short h) {
- return ((__v8hi)_v)[0] == a && ((__v8hi)_v)[1] == b && ((__v8hi)_v)[2] == c && ((__v8hi)_v)[3] == d && ((__v8hi)_v)[4] == e && ((__v8hi)_v)[5] == f && ((__v8hi)_v)[6] == g && ((__v8hi)_v)[7] == h;
+ __v8hi v = (__v8hi)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v8hu(__m128i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h) {
- return ((__v8hu)_v)[0] == a && ((__v8hu)_v)[1] == b && ((__v8hu)_v)[2] == c && ((__v8hu)_v)[3] == d && ((__v8hu)_v)[4] == e && ((__v8hu)_v)[5] == f && ((__v8hu)_v)[6] == g && ((__v8hu)_v)[7] == h;
+ __v8hu v = (__v8hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v16qi(__m128i _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h, signed char i, signed char j, signed char k, signed char l, signed char m, signed char n, signed char o, signed char p) {
- return ((__v16qs)_v)[0] == a && ((__v16qs)_v)[1] == b && ((__v16qs)_v)[2] == c && ((__v16qs)_v)[3] == d && ((__v16qs)_v)[4] == e && ((__v16qs)_v)[5] == f && ((__v16qs)_v)[6] == g && ((__v16qs)_v)[7] == h && ((__v16qs)_v)[8] == i && ((__v16qs)_v)[9] == j && ((__v16qs)_v)[10] == k && ((__v16qs)_v)[11] == l && ((__v16qs)_v)[12] == m && ((__v16qs)_v)[13] == n && ((__v16qs)_v)[14] == o && ((__v16qs)_v)[15] == p;
+ __v16qs v = (__v16qs)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
constexpr bool match_v16qu(__m128i _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h, unsigned char i, unsigned char j, unsigned char k, unsigned char l, unsigned char m, unsigned char n, unsigned char o, unsigned char p) {
- return ((__v16qu)_v)[0] == a && ((__v16qu)_v)[1] == b && ((__v16qu)_v)[2] == c && ((__v16qu)_v)[3] == d && ((__v16qu)_v)[4] == e && ((__v16qu)_v)[5] == f && ((__v16qu)_v)[6] == g && ((__v16qu)_v)[7] == h && ((__v16qu)_v)[8] == i && ((__v16qu)_v)[9] == j && ((__v16qu)_v)[10] == k && ((__v16qu)_v)[11] == l && ((__v16qu)_v)[12] == m && ((__v16qu)_v)[13] == n && ((__v16qu)_v)[14] == o && ((__v16qu)_v)[15] == p;
+ __v16qu v = (__v16qu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
constexpr bool match_m256(__m256 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07) {
- return ((__v8su)_v)[ 0] == __builtin_bit_cast(unsigned, __e00) && ((__v8su)_v)[ 1] == __builtin_bit_cast(unsigned, __e01) && ((__v8su)_v)[ 2] == __builtin_bit_cast(unsigned, __e02) && ((__v8su)_v)[ 3] == __builtin_bit_cast(unsigned, __e03) &&
- ((__v8su)_v)[ 4] == __builtin_bit_cast(unsigned, __e04) && ((__v8su)_v)[ 5] == __builtin_bit_cast(unsigned, __e05) && ((__v8su)_v)[ 6] == __builtin_bit_cast(unsigned, __e06) && ((__v8su)_v)[ 7] == __builtin_bit_cast(unsigned, __e07);
+ __v8su v = (__v8su)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07);
}
constexpr bool match_m256d(__m256d _v, double a, double b, double c, double d) {
- return ((__v4du)_v)[0] == __builtin_bit_cast(unsigned long long, a) && ((__v4du)_v)[1] == __builtin_bit_cast(unsigned long long, b) && ((__v4du)_v)[2] == __builtin_bit_cast(unsigned long long, c) && ((__v4du)_v)[3] == __builtin_bit_cast(unsigned long long, d);
+ __v4du v = (__v4du)_v;
+ return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b) && v[2] == __builtin_bit_cast(unsigned long long, c) && v[3] == __builtin_bit_cast(unsigned long long, d);
}
#ifdef __SSE2__
constexpr bool match_m256h(__m256h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07,
_Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15) {
- return ((__v16hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v16hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v16hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v16hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- ((__v16hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v16hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v16hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v16hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
- ((__v16hu)_v)[ 8] == __builtin_bit_cast(unsigned short, __e08) && ((__v16hu)_v)[ 9] == __builtin_bit_cast(unsigned short, __e09) && ((__v16hu)_v)[10] == __builtin_bit_cast(unsigned short, __e10) && ((__v16hu)_v)[11] == __builtin_bit_cast(unsigned short, __e11) &&
- ((__v16hu)_v)[12] == __builtin_bit_cast(unsigned short, __e12) && ((__v16hu)_v)[13] == __builtin_bit_cast(unsigned short, __e13) && ((__v16hu)_v)[14] == __builtin_bit_cast(unsigned short, __e14) && ((__v16hu)_v)[15] == __builtin_bit_cast(unsigned short, __e15);
+ __v16hu v = (__v16hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15);
}
#endif
constexpr bool match_m256i(__m256i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d) {
- return ((__v4du)_v)[0] == a && ((__v4du)_v)[1] == b && ((__v4du)_v)[2] == c && ((__v4du)_v)[3] == d;
+ __v4du v = (__v4du)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v4di(__m256i _v, long long a, long long b, long long c, long long d) {
- return ((__v4di)_v)[0] == a && ((__v4di)_v)[1] == b && ((__v4di)_v)[2] == c && ((__v4di)_v)[3] == d;
+ __v4di v = (__v4di)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
constexpr bool match_v8si(__m256i _v, int a, int b, int c, int d, int e, int f, int g, int h) {
- return ((__v8si)_v)[0] == a && ((__v8si)_v)[1] == b && ((__v8si)_v)[2] == c && ((__v8si)_v)[3] == d && ((__v8si)_v)[4] == e && ((__v8si)_v)[5] == f && ((__v8si)_v)[6] == g && ((__v8si)_v)[7] == h;
+ __v8si v = (__v8si)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v8su(__m256i _v, unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f, unsigned g, unsigned h) {
- return ((__v8su)_v)[0] == a && ((__v8su)_v)[1] == b && ((__v8su)_v)[2] == c && ((__v8su)_v)[3] == d && ((__v8su)_v)[4] == e && ((__v8su)_v)[5] == f && ((__v8su)_v)[6] == g && ((__v8su)_v)[7] == h;
+ __v8su v = (__v8su)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v16hi(__m256i _v, short a, short b, short c, short d, short e, short f, short g, short h, short i, short j, short k, short l, short m, short n, short o, short p) {
- return ((__v16hi)_v)[0] == a && ((__v16hi)_v)[1] == b && ((__v16hi)_v)[2] == c && ((__v16hi)_v)[3] == d && ((__v16hi)_v)[4] == e && ((__v16hi)_v)[5] == f && ((__v16hi)_v)[6] == g && ((__v16hi)_v)[7] == h && ((__v16hi)_v)[8] == i && ((__v16hi)_v)[9] == j && ((__v16hi)_v)[10] == k && ((__v16hi)_v)[11] == l && ((__v16hi)_v)[12] == m && ((__v16hi)_v)[13] == n && ((__v16hi)_v)[14] == o && ((__v16hi)_v)[15] == p;
+ __v16hi v = (__v16hi)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
constexpr bool match_v16hu(__m256i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h, unsigned short i, unsigned short j, unsigned short k, unsigned short l, unsigned short m, unsigned short n, unsigned short o, unsigned short p) {
- return ((__v16hu)_v)[0] == a && ((__v16hu)_v)[1] == b && ((__v16hu)_v)[2] == c && ((__v16hu)_v)[3] == d && ((__v16hu)_v)[4] == e && ((__v16hu)_v)[5] == f && ((__v16hu)_v)[6] == g && ((__v16hu)_v)[7] == h && ((__v16hu)_v)[8] == i && ((__v16hu)_v)[9] == j && ((__v16hu)_v)[10] == k && ((__v16hu)_v)[11] == l && ((__v16hu)_v)[12] == m && ((__v16hu)_v)[13] == n && ((__v16hu)_v)[14] == o && ((__v16hu)_v)[15] == p;
+ __v16hu v = (__v16hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
constexpr bool match_v32qi(__m256i _v, signed char __b00, signed char __b01, signed char __b02, signed char __b03, signed char __b04, signed char __b05, signed char __b06, signed char __b07,
signed char __b08, signed char __b09, signed char __b10, signed char __b11, signed char __b12, signed char __b13, signed char __b14, signed char __b15,
signed char __b16, signed char __b17, signed char __b18, signed char __b19, signed char __b20, signed char __b21, signed char __b22, signed char __b23,
signed char __b24, signed char __b25, signed char __b26, signed char __b27, signed char __b28, signed char __b29, signed char __b30, signed char __b31) {
- return ((__v32qs)_v)[ 0] == __b00 && ((__v32qs)_v)[ 1] == __b01 && ((__v32qs)_v)[ 2] == __b02 && ((__v32qs)_v)[ 3] == __b03 && ((__v32qs)_v)[ 4] == __b04 && ((__v32qs)_v)[ 5] == __b05 && ((__v32qs)_v)[ 6] == __b06 && ((__v32qs)_v)[ 7] == __b07 &&
- ((__v32qs)_v)[ 8] == __b08 && ((__v32qs)_v)[ 9] == __b09 && ((__v32qs)_v)[10] == __b10 && ((__v32qs)_v)[11] == __b11 && ((__v32qs)_v)[12] == __b12 && ((__v32qs)_v)[13] == __b13 && ((__v32qs)_v)[14] == __b14 && ((__v32qs)_v)[15] == __b15 &&
- ((__v32qs)_v)[16] == __b16 && ((__v32qs)_v)[17] == __b17 && ((__v32qs)_v)[18] == __b18 && ((__v32qs)_v)[19] == __b19 && ((__v32qs)_v)[20] == __b20 && ((__v32qs)_v)[21] == __b21 && ((__v32qs)_v)[22] == __b22 && ((__v32qs)_v)[23] == __b23 &&
- ((__v32qs)_v)[24] == __b24 && ((__v32qs)_v)[25] == __b25 && ((__v32qs)_v)[26] == __b26 && ((__v32qs)_v)[27] == __b27 && ((__v32qs)_v)[28] == __b28 && ((__v32qs)_v)[29] == __b29 && ((__v32qs)_v)[30] == __b30 && ((__v32qs)_v)[31] == __b31;
+ __v32qs v = (__v32qs)_v;
+ return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
+ v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
+ v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
+ v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
}
constexpr bool match_v32qu(__m256i _v, unsigned char __b00, unsigned char __b01, unsigned char __b02, unsigned char __b03, unsigned char __b04, unsigned char __b05, unsigned char __b06, unsigned char __b07,
unsigned char __b08, unsigned char __b09, unsigned char __b10, unsigned char __b11, unsigned char __b12, unsigned char __b13, unsigned char __b14, unsigned char __b15,
unsigned char __b16, unsigned char __b17, unsigned char __b18, unsigned char __b19, unsigned char __b20, unsigned char __b21, unsigned char __b22, unsigned char __b23,
unsigned char __b24, unsigned char __b25, unsigned char __b26, unsigned char __b27, unsigned char __b28, unsigned char __b29, unsigned char __b30, unsigned char __b31) {
- return ((__v32qu)_v)[ 0] == __b00 && ((__v32qu)_v)[ 1] == __b01 && ((__v32qu)_v)[ 2] == __b02 && ((__v32qu)_v)[ 3] == __b03 && ((__v32qu)_v)[ 4] == __b04 && ((__v32qu)_v)[ 5] == __b05 && ((__v32qu)_v)[ 6] == __b06 && ((__v32qu)_v)[ 7] == __b07 &&
- ((__v32qu)_v)[ 8] == __b08 && ((__v32qu)_v)[ 9] == __b09 && ((__v32qu)_v)[10] == __b10 && ((__v32qu)_v)[11] == __b11 && ((__v32qu)_v)[12] == __b12 && ((__v32qu)_v)[13] == __b13 && ((__v32qu)_v)[14] == __b14 && ((__v32qu)_v)[15] == __b15 &&
- ((__v32qu)_v)[16] == __b16 && ((__v32qu)_v)[17] == __b17 && ((__v32qu)_v)[18] == __b18 && ((__v32qu)_v)[19] == __b19 && ((__v32qu)_v)[20] == __b20 && ((__v32qu)_v)[21] == __b21 && ((__v32qu)_v)[22] == __b22 && ((__v32qu)_v)[23] == __b23 &&
- ((__v32qu)_v)[24] == __b24 && ((__v32qu)_v)[25] == __b25 && ((__v32qu)_v)[26] == __b26 && ((__v32qu)_v)[27] == __b27 && ((__v32qu)_v)[28] == __b28 && ((__v32qu)_v)[29] == __b29 && ((__v32qu)_v)[30] == __b30 && ((__v32qu)_v)[31] == __b31;
+ __v32qu v = (__v32qu)_v;
+ return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
+ v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
+ v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
+ v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
}
constexpr bool match_m512(__m512 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07, float __e08, float __e09, float __e10, float __e11, float __e12, float __e13, float __e14, float __e15) {
- return ((__v16su)_v)[ 0] == __builtin_bit_cast(unsigned, __e00) && ((__v16su)_v)[ 1] == __builtin_bit_cast(unsigned, __e01) && ((__v16su)_v)[ 2] == __builtin_bit_cast(unsigned, __e02) && ((__v16su)_v)[ 3] == __builtin_bit_cast(unsigned, __e03) &&
- ((__v16su)_v)[ 4] == __builtin_bit_cast(unsigned, __e04) && ((__v16su)_v)[ 5] == __builtin_bit_cast(unsigned, __e05) && ((__v16su)_v)[ 6] == __builtin_bit_cast(unsigned, __e06) && ((__v16su)_v)[ 7] == __builtin_bit_cast(unsigned, __e07) &&
- ((__v16su)_v)[ 8] == __builtin_bit_cast(unsigned, __e08) && ((__v16su)_v)[ 9] == __builtin_bit_cast(unsigned, __e09) && ((__v16su)_v)[10] == __builtin_bit_cast(unsigned, __e10) && ((__v16su)_v)[11] == __builtin_bit_cast(unsigned, __e11) &&
- ((__v16su)_v)[12] == __builtin_bit_cast(unsigned, __e12) && ((__v16su)_v)[13] == __builtin_bit_cast(unsigned, __e13) && ((__v16su)_v)[14] == __builtin_bit_cast(unsigned, __e14) && ((__v16su)_v)[15] == __builtin_bit_cast(unsigned, __e15);
+ __v16su v = (__v16su)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned, __e08) && v[ 9] == __builtin_bit_cast(unsigned, __e09) && v[10] == __builtin_bit_cast(unsigned, __e10) && v[11] == __builtin_bit_cast(unsigned, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned, __e12) && v[13] == __builtin_bit_cast(unsigned, __e13) && v[14] == __builtin_bit_cast(unsigned, __e14) && v[15] == __builtin_bit_cast(unsigned, __e15);
}
constexpr bool match_m512d(__m512d _v, double __e00, double __e01, double __e02, double __e03, double __e04, double __e05, double __e06, double __e07) {
- return ((__v8du)_v)[ 0] == __builtin_bit_cast(unsigned long long, __e00) && ((__v8du)_v)[ 1] == __builtin_bit_cast(unsigned long long, __e01) && ((__v8du)_v)[ 2] == __builtin_bit_cast(unsigned long long, __e02) && ((__v8du)_v)[ 3] == __builtin_bit_cast(unsigned long long, __e03) &&
- ((__v8du)_v)[ 4] == __builtin_bit_cast(unsigned long long, __e04) && ((__v8du)_v)[ 5] == __builtin_bit_cast(unsigned long long, __e05) && ((__v8du)_v)[ 6] == __builtin_bit_cast(unsigned long long, __e06) && ((__v8du)_v)[ 7] == __builtin_bit_cast(unsigned long long, __e07);
+ __v8du v = (__v8du)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned long long, __e00) && v[ 1] == __builtin_bit_cast(unsigned long long, __e01) && v[ 2] == __builtin_bit_cast(unsigned long long, __e02) && v[ 3] == __builtin_bit_cast(unsigned long long, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned long long, __e04) && v[ 5] == __builtin_bit_cast(unsigned long long, __e05) && v[ 6] == __builtin_bit_cast(unsigned long long, __e06) && v[ 7] == __builtin_bit_cast(unsigned long long, __e07);
}
#ifdef __SSE2__
@@ -177,47 +203,53 @@ constexpr bool match_m512h(__m512h _v, _Float16 __e00, _Float16 __e01, _Float16
_Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15,
_Float16 __e16, _Float16 __e17, _Float16 __e18, _Float16 __e19, _Float16 __e20, _Float16 __e21, _Float16 __e22, _Float16 __e23,
_Float16 __e24, _Float16 __e25, _Float16 __e26, _Float16 __e27, _Float16 __e28, _Float16 __e29, _Float16 __e30, _Float16 __e31) {
- return ((__v32hu)_v)[ 0] == __builtin_bit_cast(unsigned short, __e00) && ((__v32hu)_v)[ 1] == __builtin_bit_cast(unsigned short, __e01) && ((__v32hu)_v)[ 2] == __builtin_bit_cast(unsigned short, __e02) && ((__v32hu)_v)[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
- ((__v32hu)_v)[ 4] == __builtin_bit_cast(unsigned short, __e04) && ((__v32hu)_v)[ 5] == __builtin_bit_cast(unsigned short, __e05) && ((__v32hu)_v)[ 6] == __builtin_bit_cast(unsigned short, __e06) && ((__v32hu)_v)[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
- ((__v32hu)_v)[ 8] == __builtin_bit_cast(unsigned short, __e08) && ((__v32hu)_v)[ 9] == __builtin_bit_cast(unsigned short, __e09) && ((__v32hu)_v)[10] == __builtin_bit_cast(unsigned short, __e10) && ((__v32hu)_v)[11] == __builtin_bit_cast(unsigned short, __e11) &&
- ((__v32hu)_v)[12] == __builtin_bit_cast(unsigned short, __e12) && ((__v32hu)_v)[13] == __builtin_bit_cast(unsigned short, __e13) && ((__v32hu)_v)[14] == __builtin_bit_cast(unsigned short, __e14) && ((__v32hu)_v)[15] == __builtin_bit_cast(unsigned short, __e15) &&
- ((__v32hu)_v)[16] == __builtin_bit_cast(unsigned short, __e16) && ((__v32hu)_v)[17] == __builtin_bit_cast(unsigned short, __e17) && ((__v32hu)_v)[18] == __builtin_bit_cast(unsigned short, __e18) && ((__v32hu)_v)[19] == __builtin_bit_cast(unsigned short, __e19) &&
- ((__v32hu)_v)[20] == __builtin_bit_cast(unsigned short, __e20) && ((__v32hu)_v)[21] == __builtin_bit_cast(unsigned short, __e21) && ((__v32hu)_v)[22] == __builtin_bit_cast(unsigned short, __e22) && ((__v32hu)_v)[23] == __builtin_bit_cast(unsigned short, __e23) &&
- ((__v32hu)_v)[24] == __builtin_bit_cast(unsigned short, __e24) && ((__v32hu)_v)[25] == __builtin_bit_cast(unsigned short, __e25) && ((__v32hu)_v)[26] == __builtin_bit_cast(unsigned short, __e26) && ((__v32hu)_v)[27] == __builtin_bit_cast(unsigned short, __e27) &&
- ((__v32hu)_v)[28] == __builtin_bit_cast(unsigned short, __e28) && ((__v32hu)_v)[29] == __builtin_bit_cast(unsigned short, __e29) && ((__v32hu)_v)[30] == __builtin_bit_cast(unsigned short, __e30) && ((__v32hu)_v)[31] == __builtin_bit_cast(unsigned short, __e31);
+ __v32hu v = (__v32hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15) &&
+ v[16] == __builtin_bit_cast(unsigned short, __e16) && v[17] == __builtin_bit_cast(unsigned short, __e17) && v[18] == __builtin_bit_cast(unsigned short, __e18) && v[19] == __builtin_bit_cast(unsigned short, __e19) &&
+ v[20] == __builtin_bit_cast(unsigned short, __e20) && v[21] == __builtin_bit_cast(unsigned short, __e21) && v[22] == __builtin_bit_cast(unsigned short, __e22) && v[23] == __builtin_bit_cast(unsigned short, __e23) &&
+ v[24] == __builtin_bit_cast(unsigned short, __e24) && v[25] == __builtin_bit_cast(unsigned short, __e25) && v[26] == __builtin_bit_cast(unsigned short, __e26) && v[27] == __builtin_bit_cast(unsigned short, __e27) &&
+ v[28] == __builtin_bit_cast(unsigned short, __e28) && v[29] == __builtin_bit_cast(unsigned short, __e29) && v[30] == __builtin_bit_cast(unsigned short, __e30) && v[31] == __builtin_bit_cast(unsigned short, __e31);
}
#endif
constexpr bool match_m512i(__m512i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d, unsigned long long e, unsigned long long f, unsigned long long g, unsigned long long h) {
- return ((__v8du)_v)[0] == a && ((__v8du)_v)[1] == b && ((__v8du)_v)[2] == c && ((__v8du)_v)[3] == d && ((__v8du)_v)[4] == e && ((__v8du)_v)[5] == f && ((__v8du)_v)[6] == g && ((__v8du)_v)[7] == h;
+ __v8du v = (__v8du)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v8di(__m512i _v, long long a, long long b, long long c, long long d, long long e, long long f, long long g, long long h) {
- return ((__v8di)_v)[0] == a && ((__v8di)_v)[1] == b && ((__v8di)_v)[2] == c && ((__v8di)_v)[3] == d && ((__v8di)_v)[4] == e && ((__v8di)_v)[5] == f && ((__v8di)_v)[6] == g && ((__v8di)_v)[7] == h;
+ __v8di v = (__v8di)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
constexpr bool match_v16si(__m512i _v, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n, int o, int p) {
- return ((__v16si)_v)[0] == a && ((__v16si)_v)[1] == b && ((__v16si)_v)[2] == c && ((__v16si)_v)[3] == d && ((__v16si)_v)[4] == e && ((__v16si)_v)[5] == f && ((__v16si)_v)[6] == g && ((__v16si)_v)[7] == h && ((__v16si)_v)[8] == i && ((__v16si)_v)[9] == j && ((__v16si)_v)[10] == k && ((__v16si)_v)[11] == l && ((__v16si)_v)[12] == m && ((__v16si)_v)[13] == n && ((__v16si)_v)[14] == o && ((__v16si)_v)[15] == p;
+ __v16si v = (__v16si)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
constexpr bool match_v32hi(__m512i _v, short __e00, short __e01, short __e02, short __e03, short __e04, short __e05, short __e06, short __e07,
short __e08, short __e09, short __e10, short __e11, short __e12, short __e13, short __e14, short __e15,
short __e16, short __e17, short __e18, short __e19, short __e20, short __e21, short __e22, short __e23,
short __e24, short __e25, short __e26, short __e27, short __e28, short __e29, short __e30, short __e31) {
- return ((__v32hi)_v)[ 0] == __e00 && ((__v32hi)_v)[ 1] == __e01 && ((__v32hi)_v)[ 2] == __e02 && ((__v32hi)_v)[ 3] == __e03 && ((__v32hi)_v)[ 4] == __e04 && ((__v32hi)_v)[ 5] == __e05 && ((__v32hi)_v)[ 6] == __e06 && ((__v32hi)_v)[ 7] == __e07 &&
- ((__v32hi)_v)[ 8] == __e08 && ((__v32hi)_v)[ 9] == __e09 && ((__v32hi)_v)[10] == __e10 && ((__v32hi)_v)[11] == __e11 && ((__v32hi)_v)[12] == __e12 && ((__v32hi)_v)[13] == __e13 && ((__v32hi)_v)[14] == __e14 && ((__v32hi)_v)[15] == __e15 &&
- ((__v32hi)_v)[16] == __e16 && ((__v32hi)_v)[17] == __e17 && ((__v32hi)_v)[18] == __e18 && ((__v32hi)_v)[19] == __e19 && ((__v32hi)_v)[20] == __e20 && ((__v32hi)_v)[21] == __e21 && ((__v32hi)_v)[22] == __e22 && ((__v32hi)_v)[23] == __e23 &&
- ((__v32hi)_v)[24] == __e24 && ((__v32hi)_v)[25] == __e25 && ((__v32hi)_v)[26] == __e26 && ((__v32hi)_v)[27] == __e27 && ((__v32hi)_v)[28] == __e28 && ((__v32hi)_v)[29] == __e29 && ((__v32hi)_v)[30] == __e30 && ((__v32hi)_v)[31] == __e31;
+ __v32hi v = (__v32hi)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
}
constexpr bool match_v32hu(__m512i _v, unsigned short __e00, unsigned short __e01, unsigned short __e02, unsigned short __e03, unsigned short __e04, unsigned short __e05, unsigned short __e06, unsigned short __e07,
unsigned short __e08, unsigned short __e09, unsigned short __e10, unsigned short __e11, unsigned short __e12, unsigned short __e13, unsigned short __e14, unsigned short __e15,
unsigned short __e16, unsigned short __e17, unsigned short __e18, unsigned short __e19, unsigned short __e20, unsigned short __e21, unsigned short __e22, unsigned short __e23,
unsigned short __e24, unsigned short __e25, unsigned short __e26, unsigned short __e27, unsigned short __e28, unsigned short __e29, unsigned short __e30, unsigned short __e31) {
- return ((__v32hu)_v)[ 0] == __e00 && ((__v32hu)_v)[ 1] == __e01 && ((__v32hu)_v)[ 2] == __e02 && ((__v32hu)_v)[ 3] == __e03 && ((__v32hu)_v)[ 4] == __e04 && ((__v32hu)_v)[ 5] == __e05 && ((__v32hu)_v)[ 6] == __e06 && ((__v32hu)_v)[ 7] == __e07 &&
- ((__v32hu)_v)[ 8] == __e08 && ((__v32hu)_v)[ 9] == __e09 && ((__v32hu)_v)[10] == __e10 && ((__v32hu)_v)[11] == __e11 && ((__v32hu)_v)[12] == __e12 && ((__v32hu)_v)[13] == __e13 && ((__v32hu)_v)[14] == __e14 && ((__v32hu)_v)[15] == __e15 &&
- ((__v32hu)_v)[16] == __e16 && ((__v32hu)_v)[17] == __e17 && ((__v32hu)_v)[18] == __e18 && ((__v32hu)_v)[19] == __e19 && ((__v32hu)_v)[20] == __e20 && ((__v32hu)_v)[21] == __e21 && ((__v32hu)_v)[22] == __e22 && ((__v32hu)_v)[23] == __e23 &&
- ((__v32hu)_v)[24] == __e24 && ((__v32hu)_v)[25] == __e25 && ((__v32hu)_v)[26] == __e26 && ((__v32hu)_v)[27] == __e27 && ((__v32hu)_v)[28] == __e28 && ((__v32hu)_v)[29] == __e29 && ((__v32hu)_v)[30] == __e30 && ((__v32hu)_v)[31] == __e31;
+ __v32hu v = (__v32hu)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
}
constexpr bool match_v64qi(__m512i _v, signed char __e00, signed char __e01, signed char __e02, signed char __e03, signed char __e04, signed char __e05, signed char __e06, signed char __e07,
@@ -228,14 +260,15 @@ constexpr bool match_v64qi(__m512i _v, signed char __e00, signed char __e01, sig
signed char __e40, signed char __e41, signed char __e42, signed char __e43, signed char __e44, signed char __e45, signed char __e46, signed char __e47,
signed char __e48, signed char __e49, signed char __e50, signed char __e51, signed char __e52, signed char __e53, signed char __e54, signed char __e55,
signed char __e56, signed char __e57, signed char __e58, signed char __e59, signed char __e60, signed char __e61, signed char __e62, signed char __e63) {
- return ((__v64qs)_v)[ 0] == __e00 && ((__v64qs)_v)[ 1] == __e01 && ((__v64qs)_v)[ 2] == __e02 && ((__v64qs)_v)[ 3] == __e03 && ((__v64qs)_v)[ 4] == __e04 && ((__v64qs)_v)[ 5] == __e05 && ((__v64qs)_v)[ 6] == __e06 && ((__v64qs)_v)[ 7] == __e07 &&
- ((__v64qs)_v)[ 8] == __e08 && ((__v64qs)_v)[ 9] == __e09 && ((__v64qs)_v)[10] == __e10 && ((__v64qs)_v)[11] == __e11 && ((__v64qs)_v)[12] == __e12 && ((__v64qs)_v)[13] == __e13 && ((__v64qs)_v)[14] == __e14 && ((__v64qs)_v)[15] == __e15 &&
- ((__v64qs)_v)[16] == __e16 && ((__v64qs)_v)[17] == __e17 && ((__v64qs)_v)[18] == __e18 && ((__v64qs)_v)[19] == __e19 && ((__v64qs)_v)[20] == __e20 && ((__v64qs)_v)[21] == __e21 && ((__v64qs)_v)[22] == __e22 && ((__v64qs)_v)[23] == __e23 &&
- ((__v64qs)_v)[24] == __e24 && ((__v64qs)_v)[25] == __e25 && ((__v64qs)_v)[26] == __e26 && ((__v64qs)_v)[27] == __e27 && ((__v64qs)_v)[28] == __e28 && ((__v64qs)_v)[29] == __e29 && ((__v64qs)_v)[30] == __e30 && ((__v64qs)_v)[31] == __e31 &&
- ((__v64qs)_v)[32] == __e32 && ((__v64qs)_v)[33] == __e33 && ((__v64qs)_v)[34] == __e34 && ((__v64qs)_v)[35] == __e35 && ((__v64qs)_v)[36] == __e36 && ((__v64qs)_v)[37] == __e37 && ((__v64qs)_v)[38] == __e38 && ((__v64qs)_v)[39] == __e39 &&
- ((__v64qs)_v)[40] == __e40 && ((__v64qs)_v)[41] == __e41 && ((__v64qs)_v)[42] == __e42 && ((__v64qs)_v)[43] == __e43 && ((__v64qs)_v)[44] == __e44 && ((__v64qs)_v)[45] == __e45 && ((__v64qs)_v)[46] == __e46 && ((__v64qs)_v)[47] == __e47 &&
- ((__v64qs)_v)[48] == __e48 && ((__v64qs)_v)[49] == __e49 && ((__v64qs)_v)[50] == __e50 && ((__v64qs)_v)[51] == __e51 && ((__v64qs)_v)[52] == __e52 && ((__v64qs)_v)[53] == __e53 && ((__v64qs)_v)[54] == __e54 && ((__v64qs)_v)[55] == __e55 &&
- ((__v64qs)_v)[56] == __e56 && ((__v64qs)_v)[57] == __e57 && ((__v64qs)_v)[58] == __e58 && ((__v64qs)_v)[59] == __e59 && ((__v64qs)_v)[60] == __e60 && ((__v64qs)_v)[61] == __e61 && ((__v64qs)_v)[62] == __e62 && ((__v64qs)_v)[63] == __e63;
+ __v64qs v = (__v64qs)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
+ v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
+ v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
+ v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
+ v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
}
constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01, unsigned char __e02, unsigned char __e03, unsigned char __e04, unsigned char __e05, unsigned char __e06, unsigned char __e07,
@@ -246,16 +279,18 @@ constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01,
unsigned char __e40, unsigned char __e41, unsigned char __e42, unsigned char __e43, unsigned char __e44, unsigned char __e45, unsigned char __e46, unsigned char __e47,
unsigned char __e48, unsigned char __e49, unsigned char __e50, unsigned char __e51, unsigned char __e52, unsigned char __e53, unsigned char __e54, unsigned char __e55,
unsigned char __e56, unsigned char __e57, unsigned char __e58, unsigned char __e59, unsigned char __e60, unsigned char __e61, unsigned char __e62, unsigned char __e63) {
- return ((__v64qu)_v)[ 0] == __e00 && ((__v64qu)_v)[ 1] == __e01 && ((__v64qu)_v)[ 2] == __e02 && ((__v64qu)_v)[ 3] == __e03 && ((__v64qu)_v)[ 4] == __e04 && ((__v64qu)_v)[ 5] == __e05 && ((__v64qu)_v)[ 6] == __e06 && ((__v64qu)_v)[ 7] == __e07 &&
- ((__v64qu)_v)[ 8] == __e08 && ((__v64qu)_v)[ 9] == __e09 && ((__v64qu)_v)[10] == __e10 && ((__v64qu)_v)[11] == __e11 && ((__v64qu)_v)[12] == __e12 && ((__v64qu)_v)[13] == __e13 && ((__v64qu)_v)[14] == __e14 && ((__v64qu)_v)[15] == __e15 &&
- ((__v64qu)_v)[16] == __e16 && ((__v64qu)_v)[17] == __e17 && ((__v64qu)_v)[18] == __e18 && ((__v64qu)_v)[19] == __e19 && ((__v64qu)_v)[20] == __e20 && ((__v64qu)_v)[21] == __e21 && ((__v64qu)_v)[22] == __e22 && ((__v64qu)_v)[23] == __e23 &&
- ((__v64qu)_v)[24] == __e24 && ((__v64qu)_v)[25] == __e25 && ((__v64qu)_v)[26] == __e26 && ((__v64qu)_v)[27] == __e27 && ((__v64qu)_v)[28] == __e28 && ((__v64qu)_v)[29] == __e29 && ((__v64qu)_v)[30] == __e30 && ((__v64qu)_v)[31] == __e31 &&
- ((__v64qu)_v)[32] == __e32 && ((__v64qu)_v)[33] == __e33 && ((__v64qu)_v)[34] == __e34 && ((__v64qu)_v)[35] == __e35 && ((__v64qu)_v)[36] == __e36 && ((__v64qu)_v)[37] == __e37 && ((__v64qu)_v)[38] == __e38 && ((__v64qu)_v)[39] == __e39 &&
- ((__v64qu)_v)[40] == __e40 && ((__v64qu)_v)[41] == __e41 && ((__v64qu)_v)[42] == __e42 && ((__v64qu)_v)[43] == __e43 && ((__v64qu)_v)[44] == __e44 && ((__v64qu)_v)[45] == __e45 && ((__v64qu)_v)[46] == __e46 && ((__v64qu)_v)[47] == __e47 &&
- ((__v64qu)_v)[48] == __e48 && ((__v64qu)_v)[49] == __e49 && ((__v64qu)_v)[50] == __e50 && ((__v64qu)_v)[51] == __e51 && ((__v64qu)_v)[52] == __e52 && ((__v64qu)_v)[53] == __e53 && ((__v64qu)_v)[54] == __e54 && ((__v64qu)_v)[55] == __e55 &&
- ((__v64qu)_v)[56] == __e56 && ((__v64qu)_v)[57] == __e57 && ((__v64qu)_v)[58] == __e58 && ((__v64qu)_v)[59] == __e59 && ((__v64qu)_v)[60] == __e60 && ((__v64qu)_v)[61] == __e61 && ((__v64qu)_v)[62] == __e62 && ((__v64qu)_v)[63] == __e63;
-}
-
+ __v64qu v = (__v64qu)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
+ v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
+ v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
+ v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
+ v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
+}
+
+#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)
#else
>From f99c79277cde2286537b3c3d750b0aa448ad3774 Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Mon, 1 Sep 2025 13:00:54 +0300
Subject: [PATCH 6/7] Refactor: Move constexpr tests next to their respective
functions
---
clang/test/CodeGen/X86/bmi-builtins.c | 6 +++---
clang/test/CodeGen/X86/builtin_test_helpers.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang/test/CodeGen/X86/bmi-builtins.c b/clang/test/CodeGen/X86/bmi-builtins.c
index 68e114b8b39bc..219e456269956 100644
--- a/clang/test/CodeGen/X86/bmi-builtins.c
+++ b/clang/test/CodeGen/X86/bmi-builtins.c
@@ -92,7 +92,7 @@ long long test_mm_tzcnt_64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000000ULL) == 64);
TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000001ULL) == 0);
-TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000800000000ULL) == 35);
+TEST_CONSTEXPR(_mm_mm_tzcnt_64(0x0000000800000000ULL) == 35);
#endif
unsigned long long test_tzcnt_u64(unsigned long long __X) {
@@ -210,7 +210,7 @@ unsigned long long test__blsr_u64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
#endif
-#endif
+#endif // !defined(TEST_TZCNT)
// Intel intrinsics
@@ -350,4 +350,4 @@ unsigned long long test_blsr_u64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(_blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
#endif
-#endif // !defined(TEST_TZCNT)
\ No newline at end of file
+#endif
diff --git a/clang/test/CodeGen/X86/builtin_test_helpers.h b/clang/test/CodeGen/X86/builtin_test_helpers.h
index 2476a2b7c723a..1bef44d08d802 100644
--- a/clang/test/CodeGen/X86/builtin_test_helpers.h
+++ b/clang/test/CodeGen/X86/builtin_test_helpers.h
@@ -296,4 +296,4 @@ constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01,
#define TEST_CONSTEXPR(...)
-#endif
+#endif
\ No newline at end of file
>From b95880f863e9332f1788df9fa6efdd87f0e2dab7 Mon Sep 17 00:00:00 2001
From: Burhan <segabur at hotmail.com>
Date: Mon, 1 Sep 2025 13:25:21 +0300
Subject: [PATCH 7/7] tests(X86): fix _mm_tzcnt_64 typo and close conditionals
properly
---
clang/test/CodeGen/X86/bmi-builtins.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang/test/CodeGen/X86/bmi-builtins.c b/clang/test/CodeGen/X86/bmi-builtins.c
index 219e456269956..09e9e994daa6e 100644
--- a/clang/test/CodeGen/X86/bmi-builtins.c
+++ b/clang/test/CodeGen/X86/bmi-builtins.c
@@ -3,7 +3,6 @@
// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +bmi -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,TZCNT
// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -emit-llvm -o - -Wall -Werror -DTEST_TZCNT | FileCheck %s --check-prefix=TZCNT
-
#include <immintrin.h>
#include "builtin_test_helpers.h"
@@ -92,7 +91,7 @@ long long test_mm_tzcnt_64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000000ULL) == 64);
TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000000000001ULL) == 0);
-TEST_CONSTEXPR(_mm_mm_tzcnt_64(0x0000000800000000ULL) == 35);
+TEST_CONSTEXPR(_mm_tzcnt_64(0x0000000800000000ULL) == 35);
#endif
unsigned long long test_tzcnt_u64(unsigned long long __X) {
@@ -105,7 +104,7 @@ TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000000ULL) == 64);
TEST_CONSTEXPR(_tzcnt_u64(0x0000000000000001ULL) == 0);
TEST_CONSTEXPR(_tzcnt_u64(0x0000000800000000ULL) == 35);
#endif
-#endif
+#endif // __x86_64__
#if !defined(TEST_TZCNT)
unsigned int test__andn_u32(unsigned int __X, unsigned int __Y) {
@@ -210,6 +209,7 @@ unsigned long long test__blsr_u64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(__blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
#endif
+#endif // __x86_64__
#endif // !defined(TEST_TZCNT)
// Intel intrinsics
@@ -350,4 +350,4 @@ unsigned long long test_blsr_u64(unsigned long long __X) {
#if defined(__cplusplus) && (__cplusplus >= 201103L)
TEST_CONSTEXPR(_blsr_u64(0x0123456789ABCDEFULL) == (0x0123456789ABCDEFULL & (0x0123456789ABCDEFULL - 1)));
#endif
-#endif
+#endif // __x86_64__
\ No newline at end of file
More information about the cfe-commits
mailing list