@@ -74,7 +74,8 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
74
74
template<class T> inline constexpr bool is_simd_mask_v = is_simd_mask<T>::value;
75
75
76
76
template<class T> struct is_simd_flag_type;
77
- template<class T> inline constexpr bool is_simd_flag_type_v = is_simd_flag_type<T>::value;
77
+ template<class T> inline constexpr bool is_simd_flag_type_v =
78
+ is_simd_flag_type<T>::value;
78
79
79
80
template<class T, class Abi = simd_abi::compatible<T>> struct simd_size;
80
81
template<class T, class Abi = simd_abi::compatible<T>>
@@ -92,34 +93,47 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
92
93
< cxx-ref insynopsis ="" to ="parallel.simd.mask.class "> </ cxx-ref >
93
94
template<class T, class Abi = simd_abi::compatible<T>> class simd_mask;
94
95
template<class T> using native_simd_mask = simd_mask<T, simd_abi::native<T>>;
95
- template<class T, int N> using fixed_size_simd_mask = simd_mask<T, simd_abi::fixed_size<N>>;
96
+ template<class T, int N> using fixed_size_simd_mask =
97
+ simd_mask<T, simd_abi::fixed_size<N>>;
96
98
97
99
< cxx-ref insynopsis ="" to ="parallel.simd.casts "> </ cxx-ref >
98
100
template<class T, class U, class Abi> < em > see below</ em > simd_cast(const simd<U, Abi>&);
99
101
template<class T, class U, class Abi> < em > see below</ em > static_simd_cast(const simd<U, Abi>&);
100
102
101
103
template<class T, class Abi>
102
- fixed_size_simd<T, simd_size_v<T, Abi>> to_fixed_size(const simd<T, Abi>&) noexcept;
104
+ fixed_size_simd<T, simd_size_v<T, Abi>>
105
+ to_fixed_size(const simd<T, Abi>&) noexcept;
103
106
template<class T, class Abi>
104
- fixed_size_simd_mask<T, simd_size_v<T, Abi>> to_fixed_size(const simd_mask<T, Abi>&) noexcept;
105
- template<class T, int N> native_simd<T> to_native(const fixed_size_simd<T, N>&) noexcept;
106
- template<class T, int N> native_simd_mask<T> to_native(const fixed_size_simd_mask<T, N>&) noexcept;
107
- template<class T, int N> simd<T> to_compatible(const fixed_size_simd<T, N>&) noexcept;
108
- template<class T, int N> simd_mask<T> to_compatible(const fixed_size_simd_mask<T, N>&) noexcept;
107
+ fixed_size_simd_mask<T, simd_size_v<T, Abi>>
108
+ to_fixed_size(const simd_mask<T, Abi>&) noexcept;
109
+ template<class T, int N>
110
+ native_simd<T> to_native(const fixed_size_simd<T, N>&) noexcept;
111
+ template<class T, int N>
112
+ native_simd_mask<T> to_native(const fixed_size_simd_mask<T, N>&) noexcept;
113
+ template<class T, int N>
114
+ simd<T> to_compatible(const fixed_size_simd<T, N>&) noexcept;
115
+ template<class T, int N>
116
+ simd_mask<T> to_compatible(const fixed_size_simd_mask<T, N>&) noexcept;
109
117
110
118
template<size_t... Sizes, class T, class Abi>
111
- tuple<simd<T, simd_abi::deduce_t<T, Sizes>>...> split(const simd<T, Abi>&);
119
+ tuple<simd<T, simd_abi::deduce_t<T, Sizes>>...>
120
+ split(const simd<T, Abi>&);
112
121
template<size_t... Sizes, class T, class Abi>
113
- tuple<simd_mask<T, simd_mask_abi::deduce_t<T, Sizes>>...> split(const simd_mask<T, Abi>&);
122
+ tuple<simd_mask<T, simd_mask_abi::deduce_t<T, Sizes>>...>
123
+ split(const simd_mask<T, Abi>&);
114
124
template<class V, class Abi>
115
- array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(const simd<typename V::value_type, Abi>&);
125
+ array<V, simd_size_v<typename V::value_type, Abi> / V::size()>
126
+ split(const simd<typename V::value_type, Abi>&);
116
127
template<class V, class Abi>
117
- array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(const simd_mask<typename V::value_type, Abi>&);
128
+ array<V, simd_size_v<typename V::value_type, Abi> / V::size()>
129
+ split(const simd_mask<typename V::value_type, Abi>&);
118
130
119
131
template<class T, class... Abis>
120
- simd<T, simd_abi::deduce_t<T, (simd_size_v<T, Abis> + ...)>> concat(const simd<T, Abis>&...);
132
+ simd<T, simd_abi::deduce_t<T, (simd_size_v<T, Abis> + ...)>>
133
+ concat(const simd<T, Abis>&...);
121
134
template<class T, class... Abis>
122
- simd_mask<T, simd_abi::deduce_t<T, (simd_size_v<T, Abis> + ...)>> concat(const simd_mask<T, Abis>&...);
135
+ simd_mask<T, simd_abi::deduce_t<T, (simd_size_v<T, Abis> + ...)>>
136
+ concat(const simd_mask<T, Abis>&...);
123
137
124
138
< cxx-ref insynopsis ="" to ="parallel.simd.mask.reductions "> </ cxx-ref >
125
139
template<class T, class Abi> bool all_of(const simd_mask<T, Abi>&) noexcept;
@@ -147,51 +161,83 @@ <h1><ins>Header <code><experimental/simd></code> synopsis</ins></h1>
147
161
template<class T> using nodeduce_t = typename nodeduce<T>::type; // exposition only
148
162
149
163
template<class T, class Abi>
150
- where_expression<simd_mask<T, Abi>, simd<T, Abi>> where(const typename simd<T, Abi>::mask_type&, simd<T, Abi>&) noexcept;
164
+ where_expression<simd_mask<T, Abi>, simd<T, Abi>>
165
+ where(const typename simd<T, Abi>::mask_type&, simd<T, Abi>&) noexcept;
151
166
152
167
template<class T, class Abi>
153
- const_where_expression<simd_mask<T, Abi>, simd<T, Abi>> where(const typename simd<T, Abi>::mask_type&, const simd<T, Abi>&) noexcept;
168
+ const_where_expression<simd_mask<T, Abi>, simd<T, Abi>>
169
+ where(const typename simd<T, Abi>::mask_type&, const simd<T, Abi>&) noexcept;
154
170
155
171
template<class T, class Abi>
156
- where_expression<simd_mask<T, Abi>, simd_mask<T, Abi>> where(const nodeduce_t<simd_mask<T, Abit>>&, simd_mask<T, Abi>&) noexcept;
172
+ where_expression<simd_mask<T, Abi>, simd_mask<T, Abi>>
173
+ where(const nodeduce_t<simd_mask<T, Abit>>&, simd_mask<T, Abi>&) noexcept;
157
174
158
175
template<class T, class Abi>
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;
176
+ const_where_expression<simd_mask<T, Abi>, simd_mask<T, Abi>>
177
+ where(const nodeduce_t<simd_mask<T, Abit>>&, const simd_mask<T, Abi>&) noexcept;
160
178
161
179
template<class T>
162
- where_expression<bool, T> where(< em > see below</ em > k, T& d) noexcept;
180
+ where_expression<bool, T>
181
+ where(< em > see below</ em > k, T& d) noexcept;
163
182
164
183
template<class T>
165
- const_where_expression<bool, T> where(< em > see below</ em > k, const T& d) noexcept;
184
+ const_where_expression<bool, T>
185
+ where(< em > see below</ em > k, const T& d) noexcept;
166
186
167
187
< cxx-ref insynopsis ="" to ="parallel.simd.reductions "> </ cxx-ref >
168
188
template<class T, class Abi, class BinaryOperation = plus<>>
169
- T reduce(const simd<T, Abi>&, BinaryOperation = {});
189
+ T reduce(const simd<T, Abi>&,
190
+ BinaryOperation = {});
170
191
171
192
template<class M, class V, class BinaryOperation>
172
193
typename V::value_type reduce(const const_where_expression<M, V>& x,
173
- typename V::value_type identity_element, BinaryOperation binary_op);
194
+ typename V::value_type identity_element,
195
+ BinaryOperation binary_op);
174
196
template<class M, class V>
175
- typename V::value_type reduce(const const_where_expression<M, V>& x, plus<> binary_op = {});
197
+ typename V::value_type reduce(const const_where_expression<M, V>& x,
198
+ plus<>
199
+ binary_op = {});
176
200
template<class M, class V>
177
- typename V::value_type reduce(const const_where_expression<M, V>& x, multiplies<> binary_op);
201
+ typename V::value_type reduce(const const_where_expression<M, V>& x,
202
+ multiplies<>
203
+ binary_op);
178
204
template<class M, class V>
179
- typename V::value_type reduce(const const_where_expression<M, V>& x, bit_and<> binary_op);
205
+ typename V::value_type reduce(const const_where_expression<M, V>& x,
206
+ bit_and<>
207
+ binary_op);
180
208
template<class M, class V>
181
- typename V::value_type reduce(const const_where_expression<M, V>& x, bit_or<> binary_op);
209
+ typename V::value_type reduce(const const_where_expression<M, V>& x,
210
+ bit_or<>
211
+ binary_op);
182
212
template<class M, class V>
183
- typename V::value_type reduce(const const_where_expression<M, V>& x, bit_xor<> binary_op);
213
+ typename V::value_type reduce(const const_where_expression<M, V>& x,
214
+ bit_xor<>
215
+ binary_op);
184
216
185
- template<class T, class Abi> T hmin(const simd<T, abi>&);
186
- template<class T, class Abi> typename V::value_type hmin(const const_where_expression<M, V>&);
187
- template<class T, class Abi> T hmax(const simd<T, abi>&);
188
- template<class T, class Abi> typename V::value_type hmax(const const_where_expression<M, V>&);
217
+ template<class T, class Abi>
218
+ T hmin(const simd<T, abi>&);
219
+ template<class T, class Abi>
220
+ typename V::value_type hmin(const const_where_expression<M, V>&);
221
+ template<class T, class Abi>
222
+ T hmax(const simd<T, abi>&);
223
+ template<class T, class Abi>
224
+ typename V::value_type hmax(const const_where_expression<M, V>&);
189
225
190
226
< cxx-ref insynopsis ="" to ="parallel.simd.alg "> </ cxx-ref >
191
- template<class T, class Abi> simd<T, Abi> min(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
192
- template<class T, class Abi> simd<T, Abi> max(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;
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;
227
+ template<class T, class Abi>
228
+ simd<T, Abi>
229
+ min(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
230
+ template<class T, class Abi>
231
+ simd<T, Abi>
232
+ max(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
233
+ template<class T, class Abi>
234
+ pair<simd<T, Abi>, simd<T, Abi>>
235
+ minmax(const simd<T, Abi>& a, const simd<T, Abi>& b) noexcept;
236
+ template<class T, class Abi>
237
+ simd<T, Abi>
238
+ clamp(const simd<T, Abi>& v,
239
+ const simd<T, Abi>& lo,
240
+ const simd<T, Abi>& hi) noexcept;
195
241
}
196
242
}
197
243
</ pre >
@@ -2179,9 +2225,11 @@ <h1><ins>Casts</ins></h1>
2179
2225
< cxx-function >
2180
2226
< cxx-signature > < ins >
2181
2227
template<size_t... Sizes, class T, class Abi>
2182
- tuple<simd<T, simd_abi::deduce_t<T, Sizes>>...> split(const simd<T, Abi>& x);
2228
+ tuple<simd<T, simd_abi::deduce_t<T, Sizes>>...>
2229
+ split(const simd<T, Abi>& x);
2183
2230
template<size_t... Sizes, class T, class Abi>
2184
- tuple<simd_mask<T, simd_abi::deduce_t<T, Sizes>>...> split(const simd_mask<T, Abi>& x);
2231
+ tuple<simd_mask<T, simd_abi::deduce_t<T, Sizes>>...>
2232
+ split(const simd_mask<T, Abi>& x);
2185
2233
</ ins > </ cxx-signature >
2186
2234
2187
2235
< cxx-returns >
@@ -2200,9 +2248,11 @@ <h1><ins>Casts</ins></h1>
2200
2248
< cxx-function >
2201
2249
< cxx-signature > < ins >
2202
2250
template<class V, class Abi>
2203
- array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(const simd<typename V::value_type, Abi>& x);
2251
+ array<V, simd_size_v<typename V::value_type, Abi> / V::size()>
2252
+ split(const simd<typename V::value_type, Abi>& x);
2204
2253
template<class V, class Abi>
2205
- array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(const simd_mask<typename V::value_type, Abi>& x);
2254
+ array<V, simd_size_v<typename V::value_type, Abi> / V::size()>
2255
+ split(const simd_mask<typename V::value_type, Abi>& x);
2206
2256
</ ins > </ cxx-signature >
2207
2257
2208
2258
< cxx-returns >
@@ -2408,7 +2458,8 @@ <h1><ins>Class template <code>simd_mask</code> overview</ins></h1>
2408
2458
explicit simd_mask(value_type) noexcept;
2409
2459
2410
2460
< em > // implicit type conversion constructor</ em >
2411
- template<class U> simd_mask(const simd_mask<U, simd_abi::fixed_size<size()>>&) noexcept;
2461
+ template<class U>
2462
+ simd_mask(const simd_mask<U, simd_abi::fixed_size<size()>>&) noexcept;
2412
2463
2413
2464
< em > // load constructor</ em >
2414
2465
template<class Flags> simd_mask(const value_Type* mem, Flags);
0 commit comments