Skip to content

Commit 7b41db0

Browse files
committed
make doubling multi nicer
1 parent 61a7506 commit 7b41db0

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

inc/zoo/swar/associative_iteration.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -479,15 +479,16 @@ template <int NB, typename T> struct MultiplicationResult {
479479
};
480480

481481
template <int NB, typename T>
482-
constexpr auto
483-
doublingMultiplication(SWAR<NB, T> multiplicand, SWAR<NB, T> multiplier) {
484-
using S = SWAR<NB, T>; using D = SWAR<NB * 2, T>;
485-
auto [l_even, l_odd] = doublePrecision(multiplicand);
486-
auto [r_even, r_odd] = doublePrecision(multiplier);
482+
constexpr
483+
auto
484+
doublePrecisionMultiplication(SWAR<NB, T> multiplicand, SWAR<NB, T> multiplier) {
485+
auto
486+
icand = doublePrecision(multiplicand),
487+
plier = doublePrecision(multiplier);
487488
auto
488-
res_even = multiplication_OverflowUnsafe(l_even, r_even),
489-
res_odd = multiplication_OverflowUnsafe(l_odd, r_odd);
490-
return SWAR_Pair<NB * 2, T>{res_even, res_odd};
489+
lower = multiplication_OverflowUnsafe(icand.even, plier.even),
490+
upper = multiplication_OverflowUnsafe(icand.odd, plier.odd);
491+
return SWAR_Pair<NB * 2, T>{lower, upper};
491492
}
492493

493494
template <int NB, typename T>
@@ -497,7 +498,7 @@ wideningMultiplication(SWAR<NB, T> multiplicand, SWAR<NB, T> multiplier) {
497498
constexpr auto
498499
HalfLane = S::NBits,
499500
UpperHalfOfLanes = SWAR<S::NBits, T>::oddLaneMask().value();
500-
auto [lower, upper] = doublingMultiplication(multiplicand, multiplier);
501+
auto [lower, upper] = doublePrecisionMultiplication(multiplicand, multiplier);
501502
auto result = halvePrecision(lower, upper);
502503
auto
503504
over_even = D{(lower.value() & UpperHalfOfLanes) >> HalfLane},

0 commit comments

Comments
 (0)