@@ -44,16 +44,17 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
44
44
45
45
namespace std::experimental {
46
46
inline namespace parallelism_v2 {
47
- namespace simd_abi {
48
-
49
- struct scalar {};
50
- template<int N> struct fixed_size {};
51
- template<class T> inline constexpr int max_fixed_size = < em > implementation-defined</ em > ;
52
- template<class T> using compatible = < em > implementation-defined</ em > ;
53
- template<class T> using native = < em > implementation-defined</ em > ;
54
-
55
- template<class T, size_t N> struct deduce { using type = < em > see-below</ em > ; };
56
- template<class T, size_t N> using deduce_t = typename deduce<T, N>::type;
47
+ namespace simd_abi {
48
+
49
+ struct scalar {};
50
+ template<int N> struct fixed_size {};
51
+ template<class T> inline constexpr int max_fixed_size = < em > implementation-defined</ em > ;
52
+ template<class T> using compatible = < em > implementation-defined</ em > ;
53
+ template<class T> using native = < em > implementation-defined</ em > ;
54
+
55
+ template<class T, size_t N> struct deduce { using type = < em > see-below</ em > ; };
56
+ template<class T, size_t N> using deduce_t = typename deduce<T, N>::type;
57
+ }
57
58
58
59
struct element_aligned_tag {};
59
60
struct vector_aligned_tag {};
@@ -62,7 +63,7 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
62
63
inline constexpr vector_aligned_tag vector_aligned{};
63
64
template<size_t N> inline constexpr overaligned_tag<N> overaligned{};
64
65
65
- < cxx-ref insynopsis ="" to ="parallel.simd.traits "> </ cxx-ref > traits
66
+ < cxx-ref insynopsis ="" to ="parallel.simd.traits "> </ cxx-ref >
66
67
template<class T> struct is_abi_tag;
67
68
template<class T> inline constexpr bool is_abi_tag_v = is_abi_tag<T>::value;
68
69
@@ -83,17 +84,17 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
83
84
template<class T, class U = typename T::value_type>
84
85
inline constexpr size_t memory_alignment_v = memory_alignment<T,U>::value;
85
86
86
- < cxx-ref insynopsis ="" to ="parallel.simd.class "> </ cxx-ref > class template simd
87
+ < cxx-ref insynopsis ="" to ="parallel.simd.class "> </ cxx-ref >
87
88
template<class T, class Abi = simd_abi::compatible<T>> class simd;
88
- template<class T> using native_simd<T, simd_abi::native<T>>;
89
+ template<class T> using native_simd = simd <T, simd_abi::native<T>>;
89
90
template<class T, int N> using fixed_size_simd = simd<T, simd_abi::fixed_size<N>>;
90
91
91
- < cxx-ref insynopsis ="" to ="parallel.simd.mask.class "> </ cxx-ref > class template simd_mask
92
+ < cxx-ref insynopsis ="" to ="parallel.simd.mask.class "> </ cxx-ref >
92
93
template<class T, class Abi = simd_abi::compatible<T>> class simd_mask;
93
- template<class T> using native_simd_mask<T, simd_abi::native<T>>;
94
+ template<class T> using native_simd_mask = simd_mask <T, simd_abi::native<T>>;
94
95
template<class T, int N> using fixed_size_simd_mask = simd_mask<T, simd_abi::fixed_size<N>>;
95
96
96
- < cxx-ref insynopsis ="" to ="parallel.simd.casts "> </ cxx-ref > casts
97
+ < cxx-ref insynopsis ="" to ="parallel.simd.casts "> </ cxx-ref >
97
98
template<class T, class U, class Abi> < em > see-below</ em > simd_cast(const simd<U, Abi>&);
98
99
template<class T, class U, class Abi> < em > see-below</ em > static_simd_cast(const simd<U, Abi>&);
99
100
@@ -116,11 +117,11 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
116
117
array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(const simd_mask<typename V::value_type, Abi>&);
117
118
118
119
template<class T, class... Abis>
119
- simd<T, simd_abi::deduce_t> ;T, (simd_size_v<T, Abis> + ...)>> concat(const simd<T, Abis>&...);
120
+ simd<T, simd_abi::deduce_t< ;T, (simd_size_v<T, Abis> + ...)>> concat(const simd<T, Abis>&...);
120
121
template<class T, class... Abis>
121
- simd_mask<T, simd_abi::deduce_t> ;T, (simd_size_v<T, Abis> + ...)>> concat(const simd_mask<T, Abis>&...);
122
+ simd_mask<T, simd_abi::deduce_t< ;T, (simd_size_v<T, Abis> + ...)>> concat(const simd_mask<T, Abis>&...);
122
123
123
- < cxx-ref insynopsys ="" to ="parallel.simd.mask.reductions "> </ cxx-ref > reductions
124
+ // < cxx-ref insynopsys ="" to ="parallel.simd.mask.reductions "> </ cxx-ref > reductions
124
125
template<class T, class Abi> bool all_of(const simd_mask<T, Abi>&) noexcept;
125
126
template<class T, class Abi> bool any_of(const simd_mask<T, Abi>&) noexcept;
126
127
template<class T, class Abi> bool none_of(const simd_mask<T, Abi>&) noexcept;
@@ -137,11 +138,11 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
137
138
int find_first_set(< em > see-below</ em > ) noexcept;
138
139
int find_last_set(< em > see-below</ em > ) noexcept;
139
140
140
- < cxx-ref insynopsis ="" to ="parallel.simd.whereexpr "> </ cxx-ref > where expressions
141
+ < cxx-ref insynopsis ="" to ="parallel.simd.whereexpr "> </ cxx-ref >
141
142
template<class M, class T> class const_where_expression;
142
143
template<class M, class T> class where_expression;
143
144
144
- < cxx-ref insynopsis ="" to ="parallel.simd.mask.where "> </ cxx-ref > masked assignment
145
+ < cxx-ref insynopsis ="" to ="parallel.simd.mask.where "> </ cxx-ref >
145
146
template<class T> struct nodeduce { using type = T; }; // exposition only
146
147
template<class T> using nodeduce_t = typename nodeduce<T>::type; // exposition only
147
148
@@ -157,6 +158,9 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
157
158
template<class T, class Abi>
158
159
const_where_expression<simd_mask<T, Abi>, simd_mask<T, Abi>> where(const nodeduce_t<simd_mask<T, Abit>>&, const simd_mask<T, Abi>&) noexcept;
159
160
161
+ template<class T>
162
+ where_expression<bool, T> where(< em > see-below</ em > k, T& d) noexcept;
163
+
160
164
template<class T>
161
165
const_where_expression<bool, T> where(< em > see-below</ em > k, const T& d) noexcept;
162
166
@@ -168,28 +172,27 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
168
172
typename V::value_type reduce(const const_where_expression<M, V>& x,
169
173
typename V::value_type identity_element, BinaryOperation binary_op);
170
174
template<class M, class V>
171
- typename V::value_type reduce(const const_where_expression<M, V> x, plus<> binary_op = {});
175
+ typename V::value_type reduce(const const_where_expression<M, V>& x, plus<> binary_op = {});
172
176
template<class M, class V>
173
- typename V::value_type reduce(const const_where_expression<M, V> x, multiplies<> binary_op = {} );
177
+ typename V::value_type reduce(const const_where_expression<M, V>& x, multiplies<> binary_op);
174
178
template<class M, class V>
175
- typename V::value_type reduce(const const_where_expression<M, V> x, bit_and<> binary_op = {} );
179
+ typename V::value_type reduce(const const_where_expression<M, V>& x, bit_and<> binary_op);
176
180
template<class M, class V>
177
- typename V::value_type reduce(const const_where_expression<M, V> x, bit_or<> binary_op = {} );
181
+ typename V::value_type reduce(const const_where_expression<M, V>& x, bit_or<> binary_op);
178
182
template<class M, class V>
179
- typename V::value_type reduce(const const_where_expression<M, V> x, bit_xor<> binary_op = {} );
183
+ typename V::value_type reduce(const const_where_expression<M, V>& x, bit_xor<> binary_op);
180
184
181
185
template<class T, class Abi> T hmin(const simd<T, abi>&);
182
186
template<class T, class Abi> typename V::value_type hmin(const const_where_expression<M, V>&);
183
187
template<class T, class Abi> T hmax(const simd<T, abi>&);
184
188
template<class T, class Abi> typename V::value_type hmax(const const_where_expression<M, V>&);
185
189
186
- < cxx-ref insynopsis ="" to ="parallel.simd.alg "> </ cxx-ref > algorithms
190
+ < cxx-ref insynopsis ="" to ="parallel.simd.alg "> </ cxx-ref >
187
191
template<class T, class Abi> simd<T, Abi> min(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
188
192
template<class T, class Abi> simd<T, Abi> max(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
189
- template<class T, class Abi> simd<T, Abi> minmax(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
193
+ template<class T, class Abi> pair< simd<T, Abi>, simd<T, Abi> > minmax(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
190
194
template<class T, class Abi> simd<T, Abi> clamp(const simd<T, Abi>& v, const simd<T, Abi>& lo, const simd<T, Abi>& hi) noexcept;
191
195
}
192
- }
193
196
}
194
197
</ pre >
195
198
</ ins >
0 commit comments