1 // Copyright (C) 2020-2022 Free Software Foundation, Inc.
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
18 // expensive: * [1-9] * *
19 #include "bits/verify.h"
20 #include "bits/metahelpers.h"
22 template <class M
, class M2
>
23 constexpr bool assign_should_work
24 = std::is_same
<M
, M2
>::value
25 || (std::is_same
<typename
M::abi_type
,
26 std::experimental::simd_abi::fixed_size
<M::size()>>::value
27 && std::is_same
<typename
M::abi_type
, typename
M2::abi_type
>::value
);
29 template <class M
, class M2
>
30 constexpr bool assign_should_not_work
= !assign_should_work
<M
, M2
>;
32 template <class L
, class R
>
33 std::enable_if_t
<assign_should_work
<L
, R
>>
34 implicit_conversions_test()
48 template <class L
, class R
>
49 std::enable_if_t
<assign_should_not_work
<L
, R
>>
50 implicit_conversions_test()
52 VERIFY((is_substitution_failure
<L
&, R
, assignment
>) );
59 using M
= typename
V::mask_type
;
60 using std::experimental::fixed_size_simd_mask
;
61 using std::experimental::native_simd_mask
;
62 using std::experimental::simd_mask
;
64 implicit_conversions_test
<M
, simd_mask
<ldouble
>>();
65 implicit_conversions_test
<M
, simd_mask
<double>>();
66 implicit_conversions_test
<M
, simd_mask
<float>>();
67 implicit_conversions_test
<M
, simd_mask
<ullong
>>();
68 implicit_conversions_test
<M
, simd_mask
<llong
>>();
69 implicit_conversions_test
<M
, simd_mask
<ulong
>>();
70 implicit_conversions_test
<M
, simd_mask
<long>>();
71 implicit_conversions_test
<M
, simd_mask
<uint
>>();
72 implicit_conversions_test
<M
, simd_mask
<int>>();
73 implicit_conversions_test
<M
, simd_mask
<ushort
>>();
74 implicit_conversions_test
<M
, simd_mask
<short>>();
75 implicit_conversions_test
<M
, simd_mask
<uchar
>>();
76 implicit_conversions_test
<M
, simd_mask
<schar
>>();
77 implicit_conversions_test
<M
, native_simd_mask
<ldouble
>>();
78 implicit_conversions_test
<M
, native_simd_mask
<double>>();
79 implicit_conversions_test
<M
, native_simd_mask
<float>>();
80 implicit_conversions_test
<M
, native_simd_mask
<ullong
>>();
81 implicit_conversions_test
<M
, native_simd_mask
<llong
>>();
82 implicit_conversions_test
<M
, native_simd_mask
<ulong
>>();
83 implicit_conversions_test
<M
, native_simd_mask
<long>>();
84 implicit_conversions_test
<M
, native_simd_mask
<uint
>>();
85 implicit_conversions_test
<M
, native_simd_mask
<int>>();
86 implicit_conversions_test
<M
, native_simd_mask
<ushort
>>();
87 implicit_conversions_test
<M
, native_simd_mask
<short>>();
88 implicit_conversions_test
<M
, native_simd_mask
<uchar
>>();
89 implicit_conversions_test
<M
, native_simd_mask
<schar
>>();
90 implicit_conversions_test
<M
, fixed_size_simd_mask
<ldouble
, M::size()>>();
91 implicit_conversions_test
<M
, fixed_size_simd_mask
<double, M::size()>>();
92 implicit_conversions_test
<M
, fixed_size_simd_mask
<float, M::size()>>();
93 implicit_conversions_test
<M
, fixed_size_simd_mask
<ullong
, M::size()>>();
94 implicit_conversions_test
<M
, fixed_size_simd_mask
<llong
, M::size()>>();
95 implicit_conversions_test
<M
, fixed_size_simd_mask
<ulong
, M::size()>>();
96 implicit_conversions_test
<M
, fixed_size_simd_mask
<long, M::size()>>();
97 implicit_conversions_test
<M
, fixed_size_simd_mask
<uint
, M::size()>>();
98 implicit_conversions_test
<M
, fixed_size_simd_mask
<int, M::size()>>();
99 implicit_conversions_test
<M
, fixed_size_simd_mask
<ushort
, M::size()>>();
100 implicit_conversions_test
<M
, fixed_size_simd_mask
<short, M::size()>>();
101 implicit_conversions_test
<M
, fixed_size_simd_mask
<uchar
, M::size()>>();
102 implicit_conversions_test
<M
, fixed_size_simd_mask
<schar
, M::size()>>();