CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
874 lines
46 KiB
C++
874 lines
46 KiB
C++
// RUN: %clang_cc1 -std=c++20 -ffreestanding -fexperimental-new-constant-interpreter -triple x86_64-unknown-unknown -target-feature +avx512f -verify %s
|
|
|
|
#include <immintrin.h>
|
|
#include "../CodeGen/X86/builtin_test_helpers.h"
|
|
|
|
namespace Test_mm_mask_cvtsd_ss {
|
|
namespace OK {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b = { -1.0, 42.0 };
|
|
TEST_CONSTEXPR(match_m128(_mm_mask_cvtsd_ss(src, 0x1, a, b), -1.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOff {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b = { -1.0, 42.0 };
|
|
TEST_CONSTEXPR(match_m128(_mm_mask_cvtsd_ss(src, 0x0, a, b), 9.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOffInexact {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_inexact = { 1.0000000000000002, 0.0 };
|
|
constexpr __m128 r = _mm_mask_cvtsd_ss(src, 0x0, a, b_inexact);
|
|
TEST_CONSTEXPR(match_m128(r, 9.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOnInexact {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_inexact = { 1.0000000000000002, 0.0 };
|
|
constexpr __m128 r = _mm_mask_cvtsd_ss(src, 0x1, a, b_inexact);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{compile time floating point arithmetic suppressed in strict evaluation modes}}
|
|
// expected-note@-3 {{in call to '_mm_mask_cvtsd_ss({9.000000e+00, 5.000000e+00, 6.000000e+00, 7.000000e+00}, 1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {1.000000e+00, 0.000000e+00})'}}
|
|
}
|
|
namespace MaskOnInf {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_inf = { __builtin_huge_val(), 0.0 };
|
|
constexpr __m128 r = _mm_mask_cvtsd_ss(src, 0x1, a, b_inf);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces an infinity}}
|
|
// expected-note@-3 {{in call to '_mm_mask_cvtsd_ss({9.000000e+00, 5.000000e+00, 6.000000e+00, 7.000000e+00}, 1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {INF, 0.000000e+00})'}}
|
|
}
|
|
namespace MaskOnNaN {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_nan = { __builtin_nan(""), 0.0 };
|
|
constexpr __m128 r = _mm_mask_cvtsd_ss(src, 0x1, a, b_nan);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces a NaN}}
|
|
// expected-note@-3 {{in call to '_mm_mask_cvtsd_ss({9.000000e+00, 5.000000e+00, 6.000000e+00, 7.000000e+00}, 1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {nan, 0.000000e+00})'}}
|
|
}
|
|
namespace MaskOnSubnormal {
|
|
constexpr __m128 src = { 9.0f, 5.0f, 6.0f, 7.0f };
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_sub = { 1e-310, 0.0 };
|
|
constexpr __m128 r = _mm_mask_cvtsd_ss(src, 0x1, a, b_sub);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{compile time floating point arithmetic suppressed in strict evaluation modes}}
|
|
// expected-note@-3 {{in call to '_mm_mask_cvtsd_ss({9.000000e+00, 5.000000e+00, 6.000000e+00, 7.000000e+00}, 1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {1.000000e-310, 0.000000e+00})'}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm_maskz_cvtsd_ss {
|
|
namespace OK {
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b = { -1.0, 42.0 };
|
|
TEST_CONSTEXPR(match_m128(_mm_maskz_cvtsd_ss(0x1, a, b), -1.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOff {
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b = { -1.0, 42.0 };
|
|
TEST_CONSTEXPR(match_m128(_mm_maskz_cvtsd_ss(0x0, a, b), 0.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOffInexact {
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_inexact = { 1.0000000000000002, 0.0 };
|
|
TEST_CONSTEXPR(match_m128(_mm_maskz_cvtsd_ss(0x0, a, b_inexact), 0.0f, 2.0f, 3.0f, 4.0f));
|
|
}
|
|
namespace MaskOnInf {
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_inf = { __builtin_huge_val(), 0.0 };
|
|
constexpr __m128 r = _mm_maskz_cvtsd_ss(0x1, a, b_inf);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces an infinity}}
|
|
// expected-note@-3 {{in call to '_mm_maskz_cvtsd_ss(1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {INF, 0.000000e+00})'}}
|
|
}
|
|
namespace MaskOnNaN {
|
|
constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
constexpr __m128d b_nan = { __builtin_nan(""), 0.0 };
|
|
constexpr __m128 r = _mm_maskz_cvtsd_ss(0x1, a, b_nan);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces a NaN}}
|
|
// expected-note@-3 {{in call to '_mm_maskz_cvtsd_ss(1, {1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00}, {nan, 0.000000e+00})'}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_cvtpd_ps {
|
|
namespace OK {
|
|
constexpr __m512d a = { -1.0, +2.0, +4.0, +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_cvtpd_ps(a), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, +32.0f, +64.0f, +128.0f));
|
|
}
|
|
namespace Inexact {
|
|
constexpr __m512d a = { 1.0000000000000002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
|
|
constexpr __m256 r = _mm512_cvtpd_ps(a);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{compile time floating point arithmetic suppressed in strict evaluation modes}}
|
|
// expected-note@-3 {{in call to '_mm512_cvtpd_ps({1.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00})'}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_mask_cvtpd_ps {
|
|
namespace OK {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a = { -1.0, +2.0, +4.0, +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_mask_cvtpd_ps(src, 0x05, a), -1.0f, 9.0f, +4.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f));
|
|
}
|
|
namespace MaskOffInexact {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_inexact = { -1.0, +2.0, +4.0, +8.0, +16.0, 1.0000000000000002, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_mask_cvtpd_ps(src, 0b11011111, a_inexact), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 9.0f, +64.0f, +128.0f));
|
|
}
|
|
namespace MaskOffInf {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_inf = { -1.0, +2.0, +4.0, +8.0, +16.0, __builtin_huge_val(), +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_mask_cvtpd_ps(src, 0x1F, a_inf), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 9.0f, 9.0f, 9.0f));
|
|
}
|
|
namespace MaskOffNaN {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_nan = { -1.0, +2.0, +4.0, +8.0, +16.0, __builtin_nan(""), +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_mask_cvtpd_ps(src, 0x1F, a_nan), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 9.0f, 9.0f, 9.0f));
|
|
}
|
|
namespace MaskOnInf {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_inf = { -1.0, +2.0, +4.0, __builtin_huge_val(), +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m256 r = _mm512_mask_cvtpd_ps(src, 0x08, a_inf);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces an infinity}}
|
|
// expected-note@-3 {{in call to '_mm512_mask_cvtpd_ps({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 8, {-1.000000e+00, 2.000000e+00, 4.000000e+00, INF, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
namespace MaskOnNaN {
|
|
constexpr __m256 src = { 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_nan = { -1.0, +2.0, +4.0, __builtin_nan(""), +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m256 r = _mm512_mask_cvtpd_ps(src, 0x08, a_nan);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces a NaN}}
|
|
// expected-note@-3 {{in call to '_mm512_mask_cvtpd_ps({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 8, {-1.000000e+00, 2.000000e+00, 4.000000e+00, nan, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_maskz_cvtpd_ps {
|
|
namespace OK {
|
|
constexpr __m512d a = { -1.0, +2.0, +4.0, +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_maskz_cvtpd_ps(0x81, a), -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, +128.0f));
|
|
}
|
|
namespace MaskOffInexact {
|
|
constexpr __m512d a_inexact = { -1.0, +2.0, +4.0, +8.0, +16.0, 1.0000000000000002, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_maskz_cvtpd_ps(0b11011111, a_inexact), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 0.0f, +64.0f, +128.0f));
|
|
}
|
|
namespace MaskOffInf {
|
|
constexpr __m512d a_inf = { -1.0, +2.0, +4.0, +8.0, +16.0, __builtin_huge_val(), +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_maskz_cvtpd_ps(0x1F, a_inf), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
namespace MaskOffNaN {
|
|
constexpr __m512d a_nan = { -1.0, +2.0, +4.0, +8.0, +16.0, __builtin_nan(""), +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m256(_mm512_maskz_cvtpd_ps(0x1F, a_nan), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
namespace MaskOnInf {
|
|
constexpr __m512d a_inf = { -1.0, +2.0, +4.0, __builtin_huge_val(), +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m256 r = _mm512_maskz_cvtpd_ps(0x08, a_inf);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces an infinity}}
|
|
// expected-note@-3 {{in call to '_mm512_maskz_cvtpd_ps(8, {-1.000000e+00, 2.000000e+00, 4.000000e+00, INF, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
namespace MaskOnNaN {
|
|
constexpr __m512d a_nan = { -1.0, +2.0, +4.0, __builtin_nan(""), +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m256 r = _mm512_maskz_cvtpd_ps(0x08, a_nan);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces a NaN}}
|
|
// expected-note@-3 {{in call to '_mm512_maskz_cvtpd_ps(8, {-1.000000e+00, 2.000000e+00, 4.000000e+00, nan, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_cvtpd_pslo {
|
|
namespace OK {
|
|
constexpr __m512d a = { -1.0, +2.0, +4.0, +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m512(_mm512_cvtpd_pslo(a), -1.0f, +2.0f, +4.0f, +8.0f, +16.0f, +32.0f, +64.0f, +128.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_mask_cvtpd_pslo {
|
|
namespace OK {
|
|
constexpr __m512 src = (__m512){ 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,
|
|
9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a = { -1.0, +2.0, +4.0, +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m512(_mm512_mask_cvtpd_pslo(src, 0x3, a), -1.0f, +2.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
namespace MaskOffInf {
|
|
constexpr __m512 src = (__m512){ 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,
|
|
9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_inf = { -1.0, +2.0, __builtin_huge_val(), +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m512(_mm512_mask_cvtpd_pslo(src, 0x3, a_inf), -1.0f, +2.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
namespace MaskOffNaN {
|
|
constexpr __m512 src = (__m512){ 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,
|
|
9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_nan = { -1.0, +2.0, +4.0, __builtin_nan(""), +16.0, +32.0, +64.0, +128.0 };
|
|
TEST_CONSTEXPR(match_m512(_mm512_mask_cvtpd_pslo(src, 0x7, a_nan), -1.0f, +2.0f, +4.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
namespace MaskOnInf {
|
|
constexpr __m512 src = (__m512){ 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,
|
|
9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_inf = { -1.0, +2.0, __builtin_huge_val(), +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m512 r = _mm512_mask_cvtpd_pslo(src, 0x4, a_inf);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces an infinity}}
|
|
// expected-note@avx512fintrin.h:* {{in call to '_mm512_mask_cvtpd_ps({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 4, {-1.000000e+00, 2.000000e+00, INF, 8.000000e+00, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
// expected-note@-4 {{in call to '_mm512_mask_cvtpd_pslo({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 4, {-1.000000e+00, 2.000000e+00, INF, 8.000000e+00, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
namespace MaskOnNaN {
|
|
constexpr __m512 src = (__m512){ 9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,
|
|
9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f,9.0f };
|
|
constexpr __m512d a_nan = { -1.0, +2.0, __builtin_nan(""), +8.0, +16.0, +32.0, +64.0, +128.0 };
|
|
constexpr __m512 r = _mm512_mask_cvtpd_pslo(src, 0x4, a_nan);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
// expected-note@avx512fintrin.h:* {{floating point arithmetic produces a NaN}}
|
|
// expected-note@avx512fintrin.h:* {{in call to '_mm512_mask_cvtpd_ps({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 4, {-1.000000e+00, 2.000000e+00, nan, 8.000000e+00, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
// expected-note@-4 {{in call to '_mm512_mask_cvtpd_pslo({9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00, 9.000000e+00}, 4, {-1.000000e+00, 2.000000e+00, nan, 8.000000e+00, 1.600000e+01, 3.200000e+01, 6.400000e+01, 1.280000e+02})'}}
|
|
}
|
|
}
|
|
|
|
constexpr int ROUND_CUR_DIRECTION = 4;
|
|
constexpr int ROUND_NO_EXC = 8;
|
|
|
|
namespace Test_mm_mask_min_ss_valid {
|
|
constexpr __m128 result = _mm_mask_min_ss((__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f}, 1, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_ss_valid {
|
|
constexpr __m128 result = _mm_mask_max_ss((__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f}, 1, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_sd_valid {
|
|
constexpr __m128d result = _mm_mask_min_sd((__m128d)(__v2df){1.0, 2.0}, 1, (__m128d)(__v2df){10.0, 20.0}, (__m128d)(__v2df){100.0, 200.0});
|
|
TEST_CONSTEXPR(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_sd_valid {
|
|
constexpr __m128d result = _mm_mask_max_sd((__m128d)(__v2df){1.0, 2.0}, 1, (__m128d)(__v2df){10.0, 20.0}, (__m128d)(__v2df){100.0, 200.0});
|
|
TEST_CONSTEXPR(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_ss_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_ss(src, 1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_min_ss_pos_inf {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_ss(src, 1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_min_ss_neg_inf {
|
|
constexpr __m128 a = (__m128)(__v4sf){-__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_ss(src, 1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Test_mm_maskz_min_ss_valid {
|
|
constexpr __m128 result = _mm_maskz_min_ss(1, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_ss_valid {
|
|
constexpr __m128 result = _mm_maskz_max_ss(1, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_sd_valid {
|
|
constexpr __m128d result = _mm_maskz_min_sd(1, (__m128d)(__v2df){10.0, 20.0}, (__m128d)(__v2df){100.0, 200.0});
|
|
TEST_CONSTEXPR(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_sd_valid {
|
|
constexpr __m128d result = _mm_maskz_max_sd(1, (__m128d)(__v2df){10.0, 20.0}, (__m128d)(__v2df){100.0, 200.0});
|
|
TEST_CONSTEXPR(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_ss_mask_zero {
|
|
constexpr __m128 result = _mm_maskz_min_ss(0, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 0.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_ss_mask_zero {
|
|
constexpr __m128 result = _mm_mask_min_ss((__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f}, 0, (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f}, (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f});
|
|
TEST_CONSTEXPR(match_m128(result, 1.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_ss_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_min_ss(1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_sd_nan {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_nan(""), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_max_sd(1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_max_ss_pos_inf {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_max_ss(src, 1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_max_sd_neg_inf {
|
|
constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_max_sd(src, 1, a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_invalid_rounding_8 {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_invalid_rounding_8 {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_invalid_rounding_12 {
|
|
constexpr int ROUND_CUR_DIRECTION_NO_EXC = 12;
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_valid_rounding {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_valid_rounding {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 0, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 1.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 0, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 1.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_pos_infinity {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_pos_infinity {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minss_round_mask_neg_infinity {
|
|
constexpr __m128 a = (__m128)(__v4sf){-__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_minss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxss_round_mask_neg_infinity {
|
|
constexpr __m128 a = (__m128)(__v4sf){-__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = (__m128)__builtin_ia32_maxss_round_mask((__v4sf)a, (__v4sf)b, (__v4sf)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_invalid_rounding_8 {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_invalid_rounding_8 {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_invalid_rounding_12 {
|
|
constexpr int ROUND_CUR_DIRECTION_NO_EXC = 12;
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_valid_rounding {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_valid_rounding {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 0, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 1.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 0, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 1.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_nan {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_nan(""), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_nan {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_nan(""), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_pos_infinity {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_pos_infinity {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_minsd_round_mask_neg_infinity {
|
|
constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_minsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maxsd_round_mask_neg_infinity {
|
|
constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = (__m128d)__builtin_ia32_maxsd_round_mask((__v2df)a, (__v2df)b, (__v2df)src, 1, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_round_ss(src, 1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_round_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_min_round_ss(1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_round_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_max_round_ss(src, 1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_max_round_ss(1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_min_round_sd(src, 1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_round_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_min_round_sd(1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_round_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_max_round_sd(src, 1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_max_round_sd(1, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_ss_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_round_ss(src, 0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 1.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_round_ss_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_min_round_ss(0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 0.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_round_ss_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_max_round_ss(src, 0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 1.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_ss_mask_zero {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_max_round_ss(0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128(result, 0.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_sd_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_min_round_sd(src, 0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 1.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_round_sd_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_min_round_sd(0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 0.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_max_round_sd_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_max_round_sd(src, 0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 1.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_sd_mask_zero {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_max_round_sd(0, a, b, ROUND_CUR_DIRECTION);
|
|
static_assert(match_m128d(result, 0.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_ss_invalid_rounding {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_round_ss(src, 1, a, b, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_ss_invalid_rounding {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_max_round_ss(1, a, b, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_sd_invalid_rounding {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_min_round_sd(src, 1, a, b, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_sd_invalid_rounding {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_max_round_sd(1, a, b, ROUND_NO_EXC); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_min_round_ss_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 src = (__m128)(__v4sf){1.0f, 2.0f, 3.0f, 4.0f};
|
|
constexpr __m128 result = _mm_mask_min_round_ss(src, 1, a, b, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maskz_max_round_ss_inf {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_maskz_max_round_ss(1, a, b, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_mask_max_round_sd_nan {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_nan(""), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d src = (__m128d)(__v2df){1.0, 2.0};
|
|
constexpr __m128d result = _mm_mask_max_round_sd(src, 1, a, b, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_maskz_min_round_sd_inf {
|
|
constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_maskz_min_round_sd(1, a, b, ROUND_CUR_DIRECTION); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_min_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_min_ss(a, b);
|
|
static_assert(match_m128(result, 10.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_max_ss_valid {
|
|
constexpr __m128 a = (__m128)(__v4sf){10.0f, 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_max_ss(a, b);
|
|
static_assert(match_m128(result, 100.0f, 20.0f, 30.0f, 40.0f));
|
|
}
|
|
|
|
namespace Test_mm_min_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_min_sd(a, b);
|
|
static_assert(match_m128d(result, 10.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_max_sd_valid {
|
|
constexpr __m128d a = (__m128d)(__v2df){10.0, 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_max_sd(a, b);
|
|
static_assert(match_m128d(result, 100.0, 20.0));
|
|
}
|
|
|
|
namespace Test_mm_min_ss_nan {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_nanf(""), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_min_ss(a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_max_ss_inf {
|
|
constexpr __m128 a = (__m128)(__v4sf){__builtin_inff(), 20.0f, 30.0f, 40.0f};
|
|
constexpr __m128 b = (__m128)(__v4sf){100.0f, 200.0f, 300.0f, 400.0f};
|
|
constexpr __m128 result = _mm_max_ss(a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_min_sd_nan {
|
|
constexpr __m128d a = (__m128d)(__v2df){__builtin_nan(""), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_min_sd(a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm_max_sd_inf {
|
|
constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0};
|
|
constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0};
|
|
constexpr __m128d result = _mm_max_sd(a, b); // expected-error {{must be initialized by a constant expression}}
|
|
}
|
|
|
|
namespace Test_mm512_min_ps {
|
|
namespace OK {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
TEST_CONSTEXPR(match_m512(_mm512_min_ps(a, b), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f));
|
|
}
|
|
namespace NaN_A {
|
|
constexpr __m512 a = { __builtin_nanf(""), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_min_ps(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Inf_B {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, -__builtin_huge_valf(), 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_min_ps(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Denormal_A {
|
|
constexpr __m512 a = { 1e-40f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_min_ps(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_max_ps {
|
|
namespace OK {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
TEST_CONSTEXPR(match_m512(_mm512_max_ps(a, b), 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f));
|
|
}
|
|
namespace NaN_B {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, __builtin_nanf(""), 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_max_ps(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Inf_A {
|
|
constexpr __m512 a = { __builtin_huge_valf(), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_max_ps(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_max_round_ps {
|
|
namespace InvalidRounding {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_max_round_ps(a, b, _MM_FROUND_TO_ZERO);
|
|
// expected-error@-1 {{invalid rounding argument}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_min_pd {
|
|
namespace OK {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
TEST_CONSTEXPR(match_m512d(_mm512_min_pd(a, b), 1.0, 2.0, 3.0, 4.0, 4.0, 3.0, 2.0, 1.0));
|
|
}
|
|
namespace NaN_A {
|
|
constexpr __m512d a = { __builtin_nan(""), 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_min_pd(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Inf_B {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, -__builtin_huge_val(), 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_min_pd(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Denormal_B {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, -1e-310 };
|
|
constexpr __m512d r = _mm512_min_pd(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_min_round_pd {
|
|
namespace InvalidRounding {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_min_round_pd(a, b, _MM_FROUND_TO_ZERO);
|
|
// expected-error@-1 {{invalid rounding argument}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_min_round_ps {
|
|
namespace InvalidRounding {
|
|
constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f };
|
|
constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f };
|
|
constexpr __m512 r = _mm512_min_round_ps(a, b, _MM_FROUND_TO_NEG_INF);
|
|
// expected-error@-1 {{invalid rounding argument}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_max_pd {
|
|
namespace OK {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
TEST_CONSTEXPR(match_m512d(_mm512_max_pd(a, b), 8.0, 7.0, 6.0, 5.0, 5.0, 6.0, 7.0, 8.0));
|
|
}
|
|
namespace NaN_B {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, __builtin_nan(""), 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_max_pd(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
namespace Inf_A {
|
|
constexpr __m512d a = { 1.0, __builtin_huge_val(), 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_max_pd(a, b);
|
|
// expected-error@-1 {{must be initialized by a constant expression}}
|
|
}
|
|
}
|
|
|
|
namespace Test_mm512_max_round_pd {
|
|
namespace InvalidRounding {
|
|
constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
|
|
constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
|
|
constexpr __m512d r = _mm512_max_round_pd(a, b, _MM_FROUND_TO_POS_INF);
|
|
// expected-error@-1 {{invalid rounding argument}}
|
|
}
|
|
}
|