@@ -52,9 +52,9 @@ template <typename T, size_t N>
5252YNN_ALWAYS_INLINE vec< T, N> load (const T* ptr, size_t n, vec< T, N> src) {
5353 std ::integral_constant< size_t, N / 2 > n2 = {};
5454 if (n < n2) {
55- return {load (ptr, n, src. lo ()), src. hi ()};
55+ return {load (ptr, n, lo (src )), hi (src )};
5656 } else {
57- return {load (ptr, n2), load (ptr + n2, n - n2, src. hi ())};
57+ return {load (ptr, n2), load (ptr + n2, n - n2, hi (src ))};
5858 }
5959}
6060template < typename T, size_t N>
@@ -81,43 +81,43 @@ template <typename T, size_t N>
8181YNN_ALWAYS_INLINE void store (T* ptr, vec< T, N> value,
8282 std ::integral_constant< size_t, N> n) {
8383 std ::integral_constant< size_t, N / 2 > n2 = {};
84- store (ptr, value. lo (), n2);
85- store (ptr + n2, value. hi (), n2);
84+ store (ptr, lo (value ), n2);
85+ store (ptr + n2, hi (value ), n2);
8686}
8787template < typename T, size_t N>
8888YNN_ALWAYS_INLINE void store_aligned (T* ptr, vec< T, N> value,
8989 std ::integral_constant< size_t, N> n) {
9090 std ::integral_constant< size_t, N / 2 > n2 = {};
91- store_aligned (ptr, value. lo (), n2);
92- store_aligned (ptr + n2, value. hi (), n2);
91+ store_aligned (ptr, lo (value ), n2);
92+ store_aligned (ptr + n2, hi (value ), n2);
9393}
9494template < typename T, size_t N>
9595YNN_ALWAYS_INLINE void store (T* ptr, vec< T, N> value, size_t n) {
9696 std ::integral_constant< size_t, N / 2 > n2 = {};
9797 if (n < n2) {
98- store (ptr, value. lo (), n);
98+ store (ptr, lo (value ), n);
9999 } else {
100- store (ptr, value. lo (), n2);
101- store (ptr + n2, value. hi (), n - n2);
100+ store (ptr, lo (value ), n2);
101+ store (ptr + n2, hi (value ), n - n2);
102102 }
103103}
104104
105105// Arithmetic operators.
106106template < typename T, size_t N>
107107YNN_ALWAYS_INLINE vec< T, N> operator+ (vec< T, N> a, vec< T, N> b) {
108- return {a. lo () + b. lo (), a. hi () + b. hi ()};
108+ return {lo (a ) + lo (b ), hi (a ) + hi (b )};
109109}
110110template < typename T, size_t N>
111111YNN_ALWAYS_INLINE vec< T, N> operator- (vec< T, N> a, vec< T, N> b) {
112- return {a. lo () - b. lo (), a. hi () - b. hi ()};
112+ return {lo (a ) - lo (b ), hi (a ) - hi (b )};
113113}
114114template < typename T, size_t N>
115115YNN_ALWAYS_INLINE vec< T, N> operator* (vec< T, N> a, vec< T, N> b) {
116- return {a. lo () * b. lo (), a. hi () * b. hi ()};
116+ return {lo (a ) * lo (b ), hi (a ) * hi (b )};
117117}
118118template < typename T, size_t N>
119119YNN_ALWAYS_INLINE vec< T, N> operator/ (vec< T, N> a, vec< T, N> b) {
120- return {a. lo () / b. lo (), a. hi () / b. hi ()};
120+ return {lo (a ) / lo (b ), hi (a ) / hi (b )};
121121}
122122
123123template < typename T, size_t N>
@@ -144,23 +144,23 @@ YNN_ALWAYS_INLINE vec<T, N>& operator/=(vec<T, N>& a, vec<T, N> b) {
144144// Boolean operators.
145145template < typename T, size_t N>
146146YNN_ALWAYS_INLINE vec< T, N> operator& (vec< T, N> a, vec< T, N> b) {
147- return {a. lo () & b. lo (), a. hi () & b. hi ()};
147+ return {lo (a ) & lo (b ), hi (a ) & hi (b )};
148148}
149149template < typename T, size_t N>
150150YNN_ALWAYS_INLINE vec< T, N> operator| (vec< T, N> a, vec< T, N> b) {
151- return {a. lo () | b. lo (), a. hi () | b. hi ()};
151+ return {lo (a ) | lo (b ), hi (a ) | hi (b )};
152152}
153153template < typename T, size_t N>
154154YNN_ALWAYS_INLINE vec< T, N> operator^ (vec< T, N> a, vec< T, N> b) {
155- return {a. lo () ^ b. lo (), a. hi () ^ b. hi ()};
155+ return {lo (a ) ^ lo (b ), hi (a ) ^ hi (b )};
156156}
157157template < typename T, size_t N>
158158YNN_ALWAYS_INLINE vec< T, N> operator~ (vec< T, N> a) {
159- return {~ a. lo (), ~ a. hi ()};
159+ return {~ lo (a ), ~ hi (a )};
160160}
161161template < typename T, size_t N>
162162YNN_ALWAYS_INLINE vec< T, N> operator<< (vec< T, N> a, int b) {
163- return {a. lo () << b, a. hi () << b};
163+ return {lo (a ) << b, hi (a ) << b};
164164}
165165
166166template < typename T, size_t N>
@@ -180,60 +180,60 @@ YNN_ALWAYS_INLINE vec<T, N>& operator^=(vec<T, N>& a, vec<T, N> b) {
180180}
181181template < typename T, size_t N>
182182YNN_ALWAYS_INLINE vec< T, N> min (vec< T, N> a, vec< T, N> b) {
183- return {min (a. lo (), b. lo ()), min (a. hi (), b. hi ())};
183+ return {min (lo (a ), lo (b )), min (hi (a ), hi (b ))};
184184}
185185template < typename T, size_t N>
186186YNN_ALWAYS_INLINE vec< T, N> max (vec< T, N> a, vec< T, N> b) {
187- return {max (a. lo (), b. lo ()), max (a. hi (), b. hi ())};
187+ return {max (lo (a ), lo (b )), max (hi (a ), hi (b ))};
188188}
189189template < typename T, size_t N>
190190YNN_ALWAYS_INLINE vec< T, N> copysign (vec< T, N> mag, vec< T, N> sgn) {
191- return {copysign (mag. lo (), sgn. lo ()), copysign (mag. hi (), sgn. hi ())};
191+ return {copysign (lo (mag ), lo (sgn )), copysign (hi (mag ), hi (sgn ))};
192192};
193193template < typename T, size_t N>
194194YNN_ALWAYS_INLINE vec< T, N> abs (vec< T, N> a) {
195- return {abs (a. lo ()), abs (a. hi ())};
195+ return {abs (lo (a )), abs (hi (a ))};
196196}
197197template < typename T, size_t N>
198198YNN_ALWAYS_INLINE vec< T, N> add_sat (vec< T, N> a, vec< T, N> b) {
199- return {add_sat (a. lo (), b. lo ()), add_sat (a. hi (), b. hi ())};
199+ return {add_sat (lo (a ), lo (b )), add_sat (hi (a ), hi (b ))};
200200}
201201template < typename T, size_t N>
202202YNN_ALWAYS_INLINE vec< T, N> sub_sat (vec< T, N> a, vec< T, N> b) {
203- return {sub_sat (a. lo (), b. lo ()), sub_sat (a. hi (), b. hi ())};
203+ return {sub_sat (lo (a ), lo (b )), sub_sat (hi (a ), hi (b ))};
204204}
205205template < typename T, size_t N>
206206YNN_ALWAYS_INLINE vec< T, N> floor (vec< T, N> a) {
207- return {floor (a. lo ()), floor (a. hi ())};
207+ return {floor (lo (a )), floor (hi (a ))};
208208}
209209template < typename T, size_t N>
210210YNN_ALWAYS_INLINE vec< T, N> floor_log2 (vec< T, N> a) {
211- return {floor_log2 (a. lo ()), floor_log2 (a. hi ())};
211+ return {floor_log2 (lo (a )), floor_log2 (hi (a ))};
212212}
213213
214214template < typename T, size_t N>
215215YNN_ALWAYS_INLINE vec< T, N> exp2_round (vec< T, N> a) {
216- return {exp2_round (a. lo ()), exp2_round (a. hi ())};
216+ return {exp2_round (lo (a )), exp2_round (hi (a ))};
217217}
218218template < typename T, size_t N>
219219YNN_ALWAYS_INLINE vec< T, N> copynan (vec< T, N> x, vec< T, N> nan) {
220- return {copynan (x. lo (), nan. lo ()), copynan (x. hi (), nan. hi ())};
220+ return {copynan (lo (x ), lo (nan )), copynan (hi (x ), hi (nan ))};
221221}
222222template < typename T, size_t N>
223223YNN_ALWAYS_INLINE vec< T, N> ceil (vec< T, N> a) {
224- return {ceil (a. lo ()), ceil (a. hi ())};
224+ return {ceil (lo (a )), ceil (hi (a ))};
225225}
226226template < typename T, size_t N>
227227YNN_ALWAYS_INLINE vec< T, N> round (vec< T, N> a) {
228- return {round (a. lo ()), round (a. hi ())};
228+ return {round (lo (a )), round (hi (a ))};
229229}
230230template < typename T, size_t N>
231231YNN_ALWAYS_INLINE vec< T, N> sqrt (vec< T, N> a) {
232- return {sqrt (a. lo ()), sqrt (a. hi ())};
232+ return {sqrt (lo (a )), sqrt (hi (a ))};
233233}
234234template < typename T, size_t N>
235235YNN_ALWAYS_INLINE vec< T, N> fma (vec< T, N> a, vec< T, N> b, vec< T, N> acc) {
236- return {fma (a. lo (), b. lo (), acc. lo ()), fma (a. hi (), b. hi (), acc. hi ())};
236+ return {fma (lo (a ), lo (b ), lo (acc )), fma (hi (a ), hi (b ), hi (acc ))};
237237}
238238
239239template < int Index, typename T, size_t N>
@@ -246,7 +246,7 @@ template <int Index, typename T, size_t N>
246246YNN_ALWAYS_INLINE vec< T, N / 2 > extract (vec< T, N> x,
247247 std ::integral_constant< size_t, N / 2 > ) {
248248 static_assert (Index == 0 || Index == 1 , " " );
249- return Index == 0 ? x. lo () : x. hi ();
249+ return Index == 0 ? lo (x ) : hi (x );
250250}
251251template < int Index, typename T, size_t N>
252252YNN_ALWAYS_INLINE vec< T, N / 4 > extract (vec< T, N> x,
@@ -263,31 +263,31 @@ YNN_ALWAYS_INLINE vec<T, N*2> concat(vec<T, N> a, vec<T, N> b) {
263263
264264template < typename To, typename From, size_t N>
265265YNN_ALWAYS_INLINE vec< To, N> cast (vec< From, N> from, To) {
266- return {cast (from. lo (), To ()), cast (from. hi (), To ())};
266+ return {cast (lo (from ), To ()), cast (hi (from ), To ())};
267267}
268268
269269template < typename T, size_t N>
270270YNN_ALWAYS_INLINE T horizontal_sum (vec< T, N> x) {
271- return horizontal_sum (x. lo () + x. hi ());
271+ return horizontal_sum (lo (x ) + hi (x ));
272272}
273273template < typename T, size_t N>
274274YNN_ALWAYS_INLINE T horizontal_min (vec< T, N> x) {
275- return horizontal_min (min (x. lo (), x. hi ()));
275+ return horizontal_min (min (lo (x ), hi (x )));
276276}
277277template < typename T, size_t N>
278278YNN_ALWAYS_INLINE T horizontal_max (vec< T, N> x) {
279- return horizontal_max (max (x. lo (), x. hi ()));
279+ return horizontal_max (max (lo (x ), hi (x )));
280280}
281281
282282template < typename T, size_t N>
283283YNN_ALWAYS_INLINE void kahan_sum (vec< T, N> a, vec< T, N> & acc,
284284 vec< T, N> & error) {
285- vec< T, N / 2 > acc_lo = acc. lo ();
286- vec< T, N / 2 > acc_hi = acc. hi ();
287- vec< T, N / 2 > error_lo = error. lo ();
288- vec< T, N / 2 > error_hi = error. hi ();
289- kahan_sum (a. lo (), acc_lo, error_lo);
290- kahan_sum (a. hi (), acc_hi, error_hi);
285+ vec< T, N / 2 > acc_lo = lo (acc );
286+ vec< T, N / 2 > acc_hi = hi (acc );
287+ vec< T, N / 2 > error_lo = lo (error );
288+ vec< T, N / 2 > error_hi = hi (error );
289+ kahan_sum (lo (a ), acc_lo, error_lo);
290+ kahan_sum (hi (a ), acc_hi, error_hi);
291291 acc = concat (acc_lo, acc_hi);
292292 error = concat (error_lo, error_hi);
293293}
0 commit comments