From a7af689d5029baa0db728b33845790bae7362144 Mon Sep 17 00:00:00 2001 From: Quency Date: Wed, 12 Jul 2023 15:49:25 +0200 Subject: [PATCH 01/18] feat / MIMO: Use 128/256 SIMDe for ARM64/x86 --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 3450 ++++++++++++++++- 1 file changed, 3356 insertions(+), 94 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 1649f57878..d8fe9c1048 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -35,6 +35,9 @@ #include "PHY/sse_intrin.h" #include "PHY/impl_defs_top.h" +#ifdef __aarch64__ +#define USE_128BIT +#endif //---------------------------------------------------------------------------------------------- @@ -258,6 +261,7 @@ void nr_ulsch_compute_llr(int32_t *rxdataF_comp, */ void nr_ulsch_qpsk_qpsk(c16_t *stream0_in, c16_t *stream1_in, c16_t *stream0_out, c16_t *rho01, uint32_t length) { +#ifdef USE_128BIT simde__m128i *rho01_128i = (simde__m128i *)rho01; simde__m128i *stream0_128i_in = (simde__m128i *)stream0_in; simde__m128i *stream1_128i_in = (simde__m128i *)stream1_in; @@ -406,20 +410,241 @@ void nr_ulsch_qpsk_qpsk(c16_t *stream0_in, c16_t *stream1_in, c16_t *stream0_out simde_mm_storeu_si128(&stream0_128i_out[i + 1], simde_mm_unpackhi_epi16(y0r, y0i)); } } +#else + + simde__m256i *rho01_256i = (simde__m256i *)rho01; + simde__m256i *stream0_256i_in = (simde__m256i *)stream0_in; + simde__m256i *stream1_256i_in = (simde__m256i *)stream1_in; + simde__m256i *stream0_256i_out = (simde__m256i *)stream0_out; + simde__m256i ONE_OVER_2_SQRT_2 = simde_mm256_set1_epi16(23170); // round(2 ^ 16 / (2 * sqrt(2))) + + // In each iteration, we take 16 complex symbols + for (int i = 0; i < length >> 3; i += 2) { + + /// Compute real and imaginary parts of MF output for stream 0 (desired stream) + simde__m256i y0r, y0i; + simde_mm256_separate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i + 1]); + simde__m256i y0r_over2 = simde_mm256_mulhi_epi16(y0r, ONE_OVER_2_SQRT_2); + y0r_over2 = simde_mm256_slli_epi16(y0r_over2, 1); // y0r_over2 = Re(y0) / sqrt(2) + simde__m256i y0i_over2 = simde_mm256_mulhi_epi16(y0i, ONE_OVER_2_SQRT_2); + y0i_over2 = simde_mm256_slli_epi16(y0i_over2, 1); // y0i_over2 = Im(y0) / sqrt(2) + + /// Compute real and imaginary parts of MF output for stream 1 (interference stream) + simde__m256i y1r_over2, y1i_over2; + simde_mm256_separate_real_imag_parts(&y1r_over2, &y1i_over2, stream1_256i_in[i], stream1_256i_in[i + 1]); + y1r_over2 = simde_mm256_srai_epi16(y1r_over2, 1); // y1r_over2 = Re(y1) / 2 + y1i_over2 = simde_mm256_srai_epi16(y1i_over2, 1); // y1i_over2 = Im(y1) / 2 + + /// Get real and imaginary parts of rho + simde__m256i rhor, rhoi; + simde_mm256_separate_real_imag_parts(&rhor, &rhoi, rho01_256i[i], rho01_256i[i + 1]); + + /// Compute |psi_r| and |psi_i| + + // psi_r = rhor * xR + rhoi * xI + // psi_i = rhor * xI - rhoi * xR + + // Put (rho_r + rho_i)/(2*sqrt(2)) in rho_p + // rhor * xR + rhoi * xI --> xR = 1/sqrt(2) and xI = 1/sqrt(2) + // rhor * xI - rhoi * xR --> xR = -1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i rho_p = simde_mm256_adds_epi16(rhor, rhoi); // rho_p = Re(rho) + Im(rho) + rho_p = simde_mm256_mulhi_epi16(rho_p, ONE_OVER_2_SQRT_2); // rho_p = rho_p / (2*sqrt(2)) + + // Put (rho_r - rho_i)/(2*sqrt(2)) in rho_m + // rhor * xR + rhoi * xI --> xR = 1/sqrt(2) and xI = -1/sqrt(2) + // rhor * xI - rhoi * xR --> xR = 1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i rho_m = simde_mm256_subs_epi16(rhor, rhoi); // rho_m = Re(rho) - Im(rho) + rho_m = simde_mm256_mulhi_epi16(rho_m, ONE_OVER_2_SQRT_2); // rho_m = rho_m / (2*sqrt(2)) + + // xR = 1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i abs_psi_rpm = simde_mm256_subs_epi16(rho_p, y1r_over2); // psi_rpm = rho_p - y1r/2 + abs_psi_rpm = simde_mm256_abs_epi16(abs_psi_rpm); // abs_psi_rpm = |psi_rpm| + + // xR = 1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i abs_psi_imm = simde_mm256_subs_epi16(rho_m, y1i_over2); // psi_imm = rho_m - y1i/2 + abs_psi_imm = simde_mm256_abs_epi16(abs_psi_imm); // abs_psi_imm = |psi_imm| + + // xR = 1/sqrt(2) and xI = -1/sqrt(2) + simde__m256i abs_psi_rmm = simde_mm256_subs_epi16(rho_m, y1r_over2); // psi_rmm = rho_m - y1r/2 + abs_psi_rmm = simde_mm256_abs_epi16(abs_psi_rmm); // abs_psi_rmm = |psi_rmm| + + // xR = -1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i abs_psi_ipm = simde_mm256_subs_epi16(rho_p, y1i_over2); // psi_ipm = rho_p - y1i/2 + abs_psi_ipm = simde_mm256_abs_epi16(abs_psi_ipm); // abs_psi_ipm = |psi_ipm| + + // xR = -1/sqrt(2) and xI = -1/sqrt(2) + simde__m256i abs_psi_rpp = simde_mm256_adds_epi16(rho_p, y1r_over2); // psi_rpp = rho_p + y1r/2 + abs_psi_rpp = simde_mm256_abs_epi16(abs_psi_rpp); // abs_psi_rpp = |psi_rpp| + + // xR = -1/sqrt(2) and xI = -1/sqrt(2) + simde__m256i abs_psi_imp = simde_mm256_adds_epi16(rho_m, y1i_over2); // psi_imp = rho_m + y1i/2 + abs_psi_imp = simde_mm256_abs_epi16(abs_psi_imp); // abs_psi_imp = |psi_imp| + + // xR = -1/sqrt(2) and xI = 1/sqrt(2) + simde__m256i abs_psi_rmp = simde_mm256_adds_epi16(rho_m, y1r_over2); // psi_rmp = rho_m + y1r/2 + abs_psi_rmp = simde_mm256_abs_epi16(abs_psi_rmp); // abs_psi_rmp = |psi_rmp| + + // xR = 1/sqrt(2) and xI = -1/sqrt(2) + simde__m256i abs_psi_ipp = simde_mm256_adds_epi16(rho_p, y1i_over2); // psi_ipm = rho_p + y1i/2 + abs_psi_ipp = simde_mm256_abs_epi16(abs_psi_ipp); // abs_psi_ipp = |psi_ipm| + + /// Compute bit metrics (lambda) + + // lambda = max { |psi_r - y1r| * |x2R| + |psi_i - y1i| * |x2I| + y0r * xR + y0i * xI} + + // xR = 1/sqrt(2) and xI = 1/sqrt(2) + // For numerator: bit_met_num_re_p = abs_psi_rpm + abs_psi_imm + y0r/sqrt(2) + y0i/sqrt(2) + simde__m256i bit_met_num_re_p = simde_mm256_adds_epi16(abs_psi_rpm, abs_psi_imm); + bit_met_num_re_p = simde_mm256_adds_epi16(bit_met_num_re_p, y0r_over2); + bit_met_num_re_p = simde_mm256_adds_epi16(bit_met_num_re_p, y0i_over2); + + // xR = 1/sqrt(2) and xI = -1/sqrt(2) + // For numerator: bit_met_num_re_m = abs_psi_rmm + abs_psi_ipp + y0r/sqrt(2) - y0i/sqrt(2) + simde__m256i bit_met_num_re_m = simde_mm256_adds_epi16(abs_psi_rmm, abs_psi_ipp); + bit_met_num_re_m = simde_mm256_adds_epi16(bit_met_num_re_m, y0r_over2); + bit_met_num_re_m = simde_mm256_subs_epi16(bit_met_num_re_m, y0i_over2); + + // xR = -1/sqrt(2) and xI = 1/sqrt(2) + // For denominator: bit_met_den_re_p = abs_psi_rmp + abs_psi_ipm - y0r/sqrt(2) + y0i/sqrt(2) + simde__m256i bit_met_den_re_p = simde_mm256_adds_epi16(abs_psi_rmp, abs_psi_ipm); + bit_met_den_re_p = simde_mm256_subs_epi16(bit_met_den_re_p, y0r_over2); + bit_met_den_re_p = simde_mm256_adds_epi16(bit_met_den_re_p, y0i_over2); + + // xR = -1/sqrt(2) and xI = -1/sqrt(2) + // For denominator: bit_met_den_re_m = abs_psi_rpp + abs_psi_imp - y0r/sqrt(2) - y0i/sqrt(2) + simde__m256i bit_met_den_re_m = simde_mm256_adds_epi16(abs_psi_rpp, abs_psi_imp); + bit_met_den_re_m = simde_mm256_subs_epi16(bit_met_den_re_m, y0r_over2); + bit_met_den_re_m = simde_mm256_subs_epi16(bit_met_den_re_m, y0i_over2); + + // xR = 1/sqrt(2) and xI = 1/sqrt(2) + // For numerator: bit_met_num_im_p = abs_psi_rpm + abs_psi_imm + y0r/sqrt(2) + y0i/sqrt(2) + simde__m256i bit_met_num_im_p = simde_mm256_adds_epi16(abs_psi_rpm, abs_psi_imm); + bit_met_num_im_p = simde_mm256_adds_epi16(bit_met_num_im_p, y0r_over2); + bit_met_num_im_p = simde_mm256_adds_epi16(bit_met_num_im_p, y0i_over2); + + // xR = -1/sqrt(2) and xI = 1/sqrt(2) + // For numerator: bit_met_num_im_m = abs_psi_rmp + abs_psi_ipm - y0r/sqrt(2) + y0i/sqrt(2) + simde__m256i bit_met_num_im_m = simde_mm256_adds_epi16(abs_psi_rmp, abs_psi_ipm); + bit_met_num_im_m = simde_mm256_subs_epi16(bit_met_num_im_m, y0r_over2); + bit_met_num_im_m = simde_mm256_adds_epi16(bit_met_num_im_m, y0i_over2); + + // xR = 1/sqrt(2) and xI = -1/sqrt(2) + // For denominator: bit_met_den_im_p = abs_psi_rmm + abs_psi_ipp + y0r/sqrt(2) - y0i/sqrt(2) + simde__m256i bit_met_den_im_p = simde_mm256_adds_epi16(abs_psi_rmm, abs_psi_ipp); + bit_met_den_im_p = simde_mm256_adds_epi16(bit_met_den_im_p, y0r_over2); + bit_met_den_im_p = simde_mm256_subs_epi16(bit_met_den_im_p, y0i_over2); + + // xR = -1/sqrt(2) and xI = -1/sqrt(2) + // For denominator: bit_met_den_im_m = abs_psi_rpp + abs_psi_imp - y0r/sqrt(2)- y0i/sqrt(2) + simde__m256i bit_met_den_im_m = simde_mm256_adds_epi16(abs_psi_rpp, abs_psi_imp); + bit_met_den_im_m = simde_mm256_subs_epi16(bit_met_den_im_m, y0r_over2); + bit_met_den_im_m = simde_mm256_subs_epi16(bit_met_den_im_m, y0i_over2); + + /// Compute the LLRs + + // LLR = lambda(c==1) - lambda(c==0) + + simde__m256i logmax_num_re0 = simde_mm256_max_epi16(bit_met_num_re_p, bit_met_num_re_m); // LLR of the first bit: Bit = 1 + simde__m256i logmax_den_re0 = simde_mm256_max_epi16(bit_met_den_re_p, bit_met_den_re_m); // LLR of the first bit: Bit = 0 + simde__m256i logmax_num_im0 = simde_mm256_max_epi16(bit_met_num_im_p, bit_met_num_im_m); // LLR of the second bit: Bit = 1 + simde__m256i logmax_den_im0 = simde_mm256_max_epi16(bit_met_den_im_p, bit_met_den_im_m); // LLR of the second bit: Bit = 0 + + y0r = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // LLR of first bit [L1(1), L1(2), L1(3), L1(4), L1(5), L1(6), L1(7), L1(8)] + y0i = simde_mm256_subs_epi16(logmax_num_im0, logmax_den_im0); // LLR of second bit [L2(1), L2(2), L2(3), L2(4), L2(5), L2(6), L2(7), L2(8)] + + // [L1(1), L2(1), L1(2), L2(2) ...] + simde__m128i * stream0_128i_out = (simde__m128i *)&stream0_256i_out[i]; + simde__m128i * y0r_128 = (simde__m128i *) &y0r; + simde__m128i * y0i_128 = (simde__m128i *) &y0i; + simde_mm_storeu_si128(&stream0_128i_out[0], simde_mm_unpacklo_epi16(y0r_128[0], y0i_128[0])); + simde_mm_storeu_si128(&stream0_128i_out[1], simde_mm_unpackhi_epi16(y0r_128[0], y0i_128[0])); + + // false if only 4 REs remain + if (i < ((length >> 2) - 1)) + { + simde__m128i * stream0_128i_out = (simde__m128i *)&stream0_256i_out[i + 1]; + simde_mm_storeu_si128(&stream0_128i_out[0], simde_mm_unpacklo_epi16(y0r_128[1], y0i_128[1])); + simde_mm_storeu_si128(&stream0_128i_out[1], simde_mm_unpackhi_epi16(y0r_128[1], y0i_128[1])); + } + } +#endif simde_mm_empty(); simde_m_empty(); } + static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; +static const int16_t ones256[16] __attribute__((aligned(32))) = {0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff, + 0xffff}; + +// calculate interference magnitude +// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 46 +#define interference_abs_64qam_epi16(psi, int_ch_mag, int_two_ch_mag, int_three_ch_mag, a, c1, c3, c5, c7) \ + tmp_result = simde_mm_cmpgt_epi16(int_two_ch_mag, psi); \ + tmp_result3 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); \ + tmp_result2 = simde_mm_cmpgt_epi16(int_ch_mag, psi); \ + tmp_result = simde_mm_xor_si128(tmp_result, tmp_result2); \ + tmp_result4 = simde_mm_cmpgt_epi16(psi, int_three_ch_mag); \ + tmp_result3 = simde_mm_xor_si128(tmp_result3, tmp_result4); \ + tmp_result = simde_mm_and_si128(tmp_result, c3); \ + tmp_result2 = simde_mm_and_si128(tmp_result2, c1); \ + tmp_result3 = simde_mm_and_si128(tmp_result3, c5); \ + tmp_result4 = simde_mm_and_si128(tmp_result4, c7); \ + tmp_result = simde_mm_or_si128(tmp_result, tmp_result2); \ + tmp_result3 = simde_mm_or_si128(tmp_result3, tmp_result4); \ + const simde__m128i a = simde_mm_or_si128(tmp_result, tmp_result3); + + +// calculate interference magnitude +// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 46 +#define interference_abs_64qam_epi16_256(psi, int_ch_mag, int_two_ch_mag, int_three_ch_mag, a, c1, c3, c5, c7) \ + tmp_result = simde_mm256_cmpgt_epi16(int_two_ch_mag, psi); \ + tmp_result3 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); \ + tmp_result2 = simde_mm256_cmpgt_epi16(int_ch_mag, psi); \ + tmp_result = simde_mm256_xor_si256(tmp_result, tmp_result2); \ + tmp_result4 = simde_mm256_cmpgt_epi16(psi, int_three_ch_mag); \ + tmp_result3 = simde_mm256_xor_si256(tmp_result3, tmp_result4); \ + tmp_result = simde_mm256_and_si256(tmp_result, c3); \ + tmp_result2 = simde_mm256_and_si256(tmp_result2, c1); \ + tmp_result3 = simde_mm256_and_si256(tmp_result3, c5); \ + tmp_result4 = simde_mm256_and_si256(tmp_result4, c7); \ + tmp_result = simde_mm256_or_si256(tmp_result, tmp_result2); \ + tmp_result3 = simde_mm256_or_si256(tmp_result3, tmp_result4); \ + const simde__m256i a = simde_mm256_or_si256(tmp_result, tmp_result3); + // Calculates psi_a = psi_r * a_r + psi_i * a_i #define prodsum_psi_a_epi16(psi_r, a_r, psi_i, a_i, psi_a) \ tmp_result = simde_mm_mulhi_epi16(psi_r, a_r); \ tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ tmp_result2 = simde_mm_mulhi_epi16(psi_i, a_i); \ tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - psi_a = simde_mm_adds_epi16(tmp_result, tmp_result2); + simde__m128i psi_a = simde_mm_adds_epi16(tmp_result, tmp_result2); + +// calculates psi_a = psi_r*a_r + psi_i*a_i +#define prodsum_psi_a_epi16_256(psi_r, a_r, psi_i, a_i, psi_a) \ + tmp_result = simde_mm256_mulhi_epi16(psi_r, a_r); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(psi_i, a_i); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + simde__m256i psi_a = simde_mm256_adds_epi16(tmp_result, tmp_result2); // Calculate interference magnitude #define interference_abs_epi16(psi, int_ch_mag, int_mag, c1, c2) \ @@ -429,6 +654,14 @@ static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xf tmp_result2 = simde_mm_and_si128(tmp_result2, c2); \ int_mag = simde_mm_or_si128(tmp_result, tmp_result2); +// Calculate interference magnitude +#define interference_abs_epi16_256(psi, int_ch_mag, int_mag, c1, c2) \ + tmp_result = simde_mm256_cmpgt_epi16(int_ch_mag, psi); \ + tmp_result2 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); \ + tmp_result = simde_mm256_and_si256(tmp_result, c1); \ + tmp_result2 = simde_mm256_and_si256(tmp_result2, c2); \ + int_mag = simde_mm256_or_si256(tmp_result, tmp_result2); + // Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor #define square_a_epi16(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ tmp_result = simde_mm_mulhi_epi16(a_r, a_r); \ @@ -445,6 +678,55 @@ static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xf tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ a_sq = simde_mm_adds_epi16(tmp_result, tmp_result2); +// Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor +#define square_a_epi16_256(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ + tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); + +// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM +#define square_a_64qam_epi16(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ + tmp_result = simde_mm_mulhi_epi16(a_r, a_r); \ + tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ + tmp_result = simde_mm_mulhi_epi16(tmp_result, scale_factor); \ + tmp_result = simde_mm_slli_epi16(tmp_result, 3); \ + tmp_result = simde_mm_mulhi_epi16(tmp_result, int_ch_mag); \ + tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ + tmp_result2 = simde_mm_mulhi_epi16(a_i, a_i); \ + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, scale_factor); \ + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 3); \ + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); \ + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ + const simde__m128i a_sq = simde_mm_adds_epi16(tmp_result, tmp_result2); + + +// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM +#define square_a_64qam_epi16_256(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ + tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 3); \ + tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); \ + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 3); \ + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); \ + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ + const simde__m256i a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); + simde__m128i max_epi16(simde__m128i m0, simde__m128i m1, simde__m128i m2, simde__m128i m3, simde__m128i m4, simde__m128i m5, simde__m128i m6, simde__m128i m7) { simde__m128i a0 = simde_mm_max_epi16(m0, m1); @@ -456,6 +738,17 @@ simde__m128i max_epi16(simde__m128i m0, simde__m128i m1, simde__m128i m2, simde_ return simde_mm_max_epi16(b0, b1); } +simde__m256i max_epi16_256(simde__m256i m0, simde__m256i m1, simde__m256i m2, simde__m256i m3, simde__m256i m4, simde__m256i m5, simde__m256i m6, simde__m256i m7) +{ + simde__m256i a0 = simde_mm256_max_epi16(m0, m1); + simde__m256i a1 = simde_mm256_max_epi16(m2, m3); + simde__m256i a2 = simde_mm256_max_epi16(m4, m5); + simde__m256i a3 = simde_mm256_max_epi16(m6, m7); + simde__m256i b0 = simde_mm256_max_epi16(a0, a1); + simde__m256i b1 = simde_mm256_max_epi16(a2, a3); + return simde_mm256_max_epi16(b0, b1); +} + /* * This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are * 16QAM. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. @@ -479,6 +772,7 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, c16_t *rho01, uint32_t length) { +#ifdef USE_128BIT simde__m128i *rho01_128i = (simde__m128i *)rho01; simde__m128i *stream0_128i_in = (simde__m128i *)stream0_in; simde__m128i *stream1_128i_in = (simde__m128i *)stream1_in; @@ -1013,72 +1307,561 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, stream0_128i_out[2 * i + 2] = simde_mm_unpacklo_epi32(xmm1, xmm3); // 8 LLRs, 2 REs stream0_128i_out[2 * i + 3] = simde_mm_unpackhi_epi32(xmm1, xmm3); // 8 LLRs, 2 REs } +#else + simde__m256i *rho01_256i = (simde__m256i *)rho01; + simde__m256i *stream0_256i_in = (simde__m256i *)stream0_in; + simde__m256i *stream1_256i_in = (simde__m256i *)stream1_in; + simde__m256i *stream0_256i_out = (simde__m256i *)stream0_out; + simde__m256i *ch_mag_256i = (simde__m256i *)ch_mag; + simde__m256i *ch_mag_256i_i = (simde__m256i *)ch_mag_i; + simde__m256i ONE_OVER_SQRT_10 = simde_mm256_set1_epi16(20724); // round(1/sqrt(10)*2^16) + simde__m256i ONE_OVER_SQRT_10_Q15 = simde_mm256_set1_epi16(10362); // round(1/sqrt(10)*2^15) + simde__m256i THREE_OVER_SQRT_10 = simde_mm256_set1_epi16(31086); // round(3/sqrt(10)*2^15) + simde__m256i SQRT_10_OVER_FOUR = simde_mm256_set1_epi16(25905); // round(sqrt(10)/4*2^15) + simde__m256i ONE_OVER_TWO_SQRT_10 = simde_mm256_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) + simde__m256i NINE_OVER_TWO_SQRT_10 = simde_mm256_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) + simde__m256i ch_mag_des, ch_mag_int; + simde__m256i y0r_over_sqrt10; + simde__m256i y0i_over_sqrt10; + simde__m256i y0r_three_over_sqrt10; + simde__m256i y0i_three_over_sqrt10; + simde__m256i ch_mag_over_10; + simde__m256i ch_mag_over_2; + simde__m256i ch_mag_9_over_10; + + simde__m256i xmm0 __attribute__((aligned(16))); + simde__m256i xmm1 __attribute__((aligned(16))); + simde__m256i xmm2 __attribute__((aligned(16))); + simde__m256i xmm3 __attribute__((aligned(16))); + simde__m256i xmm4 __attribute__((aligned(16))); + simde__m256i xmm5 __attribute__((aligned(16))); + simde__m256i xmm6 __attribute__((aligned(16))); + simde__m256i xmm7 __attribute__((aligned(16))); + + simde__m256i rho_rpi __attribute__((aligned(16))); + simde__m256i rho_rmi __attribute__((aligned(16))); + simde__m256i rho_rpi_1_1 __attribute__((aligned(16))); + simde__m256i rho_rpi_1_3 __attribute__((aligned(16))); + simde__m256i rho_rpi_3_1 __attribute__((aligned(16))); + simde__m256i rho_rpi_3_3 __attribute__((aligned(16))); + simde__m256i rho_rmi_1_1 __attribute__((aligned(16))); + simde__m256i rho_rmi_1_3 __attribute__((aligned(16))); + simde__m256i rho_rmi_3_1 __attribute__((aligned(16))); + simde__m256i rho_rmi_3_3 __attribute__((aligned(16))); + + simde__m256i psi_r_m3_m3 __attribute__((aligned(16))); + simde__m256i psi_r_m3_m1 __attribute__((aligned(16))); + simde__m256i psi_r_m3_p1 __attribute__((aligned(16))); + simde__m256i psi_r_m3_p3 __attribute__((aligned(16))); + simde__m256i psi_r_m1_m3 __attribute__((aligned(16))); + simde__m256i psi_r_m1_m1 __attribute__((aligned(16))); + simde__m256i psi_r_m1_p1 __attribute__((aligned(16))); + simde__m256i psi_r_m1_p3 __attribute__((aligned(16))); + simde__m256i psi_r_p1_m3 __attribute__((aligned(16))); + simde__m256i psi_r_p1_m1 __attribute__((aligned(16))); + simde__m256i psi_r_p1_p1 __attribute__((aligned(16))); + simde__m256i psi_r_p1_p3 __attribute__((aligned(16))); + simde__m256i psi_r_p3_m3 __attribute__((aligned(16))); + simde__m256i psi_r_p3_m1 __attribute__((aligned(16))); + simde__m256i psi_r_p3_p1 __attribute__((aligned(16))); + simde__m256i psi_r_p3_p3 __attribute__((aligned(16))); + + simde__m256i psi_i_m3_m3 __attribute__((aligned(16))); + simde__m256i psi_i_m3_m1 __attribute__((aligned(16))); + simde__m256i psi_i_m3_p1 __attribute__((aligned(16))); + simde__m256i psi_i_m3_p3 __attribute__((aligned(16))); + simde__m256i psi_i_m1_m3 __attribute__((aligned(16))); + simde__m256i psi_i_m1_m1 __attribute__((aligned(16))); + simde__m256i psi_i_m1_p1 __attribute__((aligned(16))); + simde__m256i psi_i_m1_p3 __attribute__((aligned(16))); + simde__m256i psi_i_p1_m3 __attribute__((aligned(16))); + simde__m256i psi_i_p1_m1 __attribute__((aligned(16))); + simde__m256i psi_i_p1_p1 __attribute__((aligned(16))); + simde__m256i psi_i_p1_p3 __attribute__((aligned(16))); + simde__m256i psi_i_p3_m3 __attribute__((aligned(16))); + simde__m256i psi_i_p3_m1 __attribute__((aligned(16))); + simde__m256i psi_i_p3_p1 __attribute__((aligned(16))); + simde__m256i psi_i_p3_p3 __attribute__((aligned(16))); + + simde__m256i a_r_m3_m3 __attribute__((aligned(16))); + simde__m256i a_r_m3_m1 __attribute__((aligned(16))); + simde__m256i a_r_m3_p1 __attribute__((aligned(16))); + simde__m256i a_r_m3_p3 __attribute__((aligned(16))); + simde__m256i a_r_m1_m3 __attribute__((aligned(16))); + simde__m256i a_r_m1_m1 __attribute__((aligned(16))); + simde__m256i a_r_m1_p1 __attribute__((aligned(16))); + simde__m256i a_r_m1_p3 __attribute__((aligned(16))); + simde__m256i a_r_p1_m3 __attribute__((aligned(16))); + simde__m256i a_r_p1_m1 __attribute__((aligned(16))); + simde__m256i a_r_p1_p1 __attribute__((aligned(16))); + simde__m256i a_r_p1_p3 __attribute__((aligned(16))); + simde__m256i a_r_p3_m3 __attribute__((aligned(16))); + simde__m256i a_r_p3_m1 __attribute__((aligned(16))); + simde__m256i a_r_p3_p1 __attribute__((aligned(16))); + simde__m256i a_r_p3_p3 __attribute__((aligned(16))); + + simde__m256i a_i_m3_m3 __attribute__((aligned(16))); + simde__m256i a_i_m3_m1 __attribute__((aligned(16))); + simde__m256i a_i_m3_p1 __attribute__((aligned(16))); + simde__m256i a_i_m3_p3 __attribute__((aligned(16))); + simde__m256i a_i_m1_m3 __attribute__((aligned(16))); + simde__m256i a_i_m1_m1 __attribute__((aligned(16))); + simde__m256i a_i_m1_p1 __attribute__((aligned(16))); + simde__m256i a_i_m1_p3 __attribute__((aligned(16))); + simde__m256i a_i_p1_m3 __attribute__((aligned(16))); + simde__m256i a_i_p1_m1 __attribute__((aligned(16))); + simde__m256i a_i_p1_p1 __attribute__((aligned(16))); + simde__m256i a_i_p1_p3 __attribute__((aligned(16))); + simde__m256i a_i_p3_m3 __attribute__((aligned(16))); + simde__m256i a_i_p3_m1 __attribute__((aligned(16))); + simde__m256i a_i_p3_p1 __attribute__((aligned(16))); + simde__m256i a_i_p3_p3 __attribute__((aligned(16))); + + simde__m256i psi_a_m3_m3 __attribute__((aligned(16))); + simde__m256i psi_a_m3_m1 __attribute__((aligned(16))); + simde__m256i psi_a_m3_p1 __attribute__((aligned(16))); + simde__m256i psi_a_m3_p3 __attribute__((aligned(16))); + simde__m256i psi_a_m1_m3 __attribute__((aligned(16))); + simde__m256i psi_a_m1_m1 __attribute__((aligned(16))); + simde__m256i psi_a_m1_p1 __attribute__((aligned(16))); + simde__m256i psi_a_m1_p3 __attribute__((aligned(16))); + simde__m256i psi_a_p1_m3 __attribute__((aligned(16))); + simde__m256i psi_a_p1_m1 __attribute__((aligned(16))); + simde__m256i psi_a_p1_p1 __attribute__((aligned(16))); + simde__m256i psi_a_p1_p3 __attribute__((aligned(16))); + simde__m256i psi_a_p3_m3 __attribute__((aligned(16))); + simde__m256i psi_a_p3_m1 __attribute__((aligned(16))); + simde__m256i psi_a_p3_p1 __attribute__((aligned(16))); + simde__m256i psi_a_p3_p3 __attribute__((aligned(16))); + + simde__m256i a_sq_m3_m3 __attribute__((aligned(16))); + simde__m256i a_sq_m3_m1 __attribute__((aligned(16))); + simde__m256i a_sq_m3_p1 __attribute__((aligned(16))); + simde__m256i a_sq_m3_p3 __attribute__((aligned(16))); + simde__m256i a_sq_m1_m3 __attribute__((aligned(16))); + simde__m256i a_sq_m1_m1 __attribute__((aligned(16))); + simde__m256i a_sq_m1_p1 __attribute__((aligned(16))); + simde__m256i a_sq_m1_p3 __attribute__((aligned(16))); + simde__m256i a_sq_p1_m3 __attribute__((aligned(16))); + simde__m256i a_sq_p1_m1 __attribute__((aligned(16))); + simde__m256i a_sq_p1_p1 __attribute__((aligned(16))); + simde__m256i a_sq_p1_p3 __attribute__((aligned(16))); + simde__m256i a_sq_p3_m3 __attribute__((aligned(16))); + simde__m256i a_sq_p3_m1 __attribute__((aligned(16))); + simde__m256i a_sq_p3_p1 __attribute__((aligned(16))); + simde__m256i a_sq_p3_p3 __attribute__((aligned(16))); + + simde__m256i y0_p_1_1 __attribute__((aligned(16))); + simde__m256i y0_p_1_3 __attribute__((aligned(16))); + simde__m256i y0_p_3_1 __attribute__((aligned(16))); + simde__m256i y0_p_3_3 __attribute__((aligned(16))); + simde__m256i y0_m_1_1 __attribute__((aligned(16))); + simde__m256i y0_m_1_3 __attribute__((aligned(16))); + simde__m256i y0_m_3_1 __attribute__((aligned(16))); + simde__m256i y0_m_3_3 __attribute__((aligned(16))); + + simde__m256i y0r __attribute__((aligned(16))); + simde__m256i y0i __attribute__((aligned(16))); + simde__m256i y1r __attribute__((aligned(16))); + simde__m256i y1i __attribute__((aligned(16))); + + simde__m256i tmp_result __attribute__((aligned(16))); + simde__m256i tmp_result2 __attribute__((aligned(16))); + + // In one iteration, we deal with 8 REs + for (int i = 0; i < length >> 3; i += 2) { + + // Get rho + simde_mm256_separate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i + 1]); + rho_rpi = simde_mm256_adds_epi16(xmm2, xmm3); // rho = Re(rho) + Im(rho) + rho_rmi = simde_mm256_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) + + // Compute the different rhos + rho_rpi_1_1 = simde_mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_10); + rho_rmi_1_1 = simde_mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_10); + rho_rpi_3_3 = simde_mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_10); + rho_rmi_3_3 = simde_mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_10); + rho_rpi_3_3 = simde_mm256_slli_epi16(rho_rpi_3_3, 1); + rho_rmi_3_3 = simde_mm256_slli_epi16(rho_rmi_3_3, 1); + + xmm4 = simde_mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_10); // Re(rho) + xmm5 = simde_mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_10); // Im(rho) + xmm5 = simde_mm256_slli_epi16(xmm5, 1); + + rho_rpi_1_3 = simde_mm256_adds_epi16(xmm4, xmm5); + rho_rmi_1_3 = simde_mm256_subs_epi16(xmm4, xmm5); + + xmm6 = simde_mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_10); // Re(rho) + xmm7 = simde_mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_10); // Im(rho) + xmm6 = simde_mm256_slli_epi16(xmm6, 1); + + rho_rpi_3_1 = simde_mm256_adds_epi16(xmm6, xmm7); + rho_rmi_3_1 = simde_mm256_subs_epi16(xmm6, xmm7); + + // Rearrange interfering MF output + simde_mm256_separate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i + 1]); + + xmm0 = simde_mm256_setzero_si256(); // ZERO + xmm2 = simde_mm256_subs_epi16(rho_rpi_1_1, y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r + psi_r_p1_p1 = simde_mm256_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r| + + xmm2 = simde_mm256_subs_epi16(rho_rmi_1_1, y1r); + psi_r_p1_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_1_1, y1i); + psi_i_p1_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_1_3, y1r); + psi_r_p1_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_1_3, y1r); + psi_r_p1_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_3_1, y1i); + psi_i_p1_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_3_1, y1r); + psi_r_p3_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_3_1, y1r); + psi_r_p3_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_1_3, y1i); + psi_i_p3_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_3_3, y1r); + psi_r_p3_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_3_3, y1r); + psi_r_p3_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rmi_3_3, y1i); + psi_i_p3_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_1_1, y1i); + psi_i_m1_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_3_1, y1i); + psi_i_m1_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_1_3, y1i); + psi_i_m3_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_subs_epi16(rho_rpi_3_3, y1i); + psi_i_m3_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_1_1, y1i); + psi_i_p1_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_3_1, y1i); + psi_i_p1_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_1_3, y1i); + psi_i_p3_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_3_3, y1i); + psi_i_p3_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_1_1, y1r); + psi_r_m1_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_1_3, y1r); + psi_r_m1_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_3_1, y1r); + psi_r_m3_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(rho_rpi_3_3, y1r); + psi_r_m3_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1r, rho_rmi_1_1); + psi_r_m1_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1r, rho_rmi_1_3); + psi_r_m1_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1i, rho_rmi_1_1); + psi_i_m1_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1i, rho_rmi_3_1); + psi_i_m1_m3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1r, rho_rmi_3_1); + psi_r_m3_p1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1r, rho_rmi_3_3); + psi_r_m3_p3 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1i, rho_rmi_1_3); + psi_i_m3_m1 = simde_mm256_abs_epi16(xmm2); + xmm2 = simde_mm256_adds_epi16(y1i, rho_rmi_3_3); + psi_i_m3_m3 = simde_mm256_abs_epi16(xmm2); + + // Rearrange desired MF output + simde_mm256_separate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i + 1]); + + // Rearrange desired channel magnitudes + // [|h|^2(1),|h|^2(2),|h|^2(3),|h|^2(4)]*(2/sqrt(10)) + simde_mm256_separate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i + 1]); + + // Rearrange interfering channel magnitudes + simde_mm256_separate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i + 1]); + + // Scale MF output of desired signal + y0r_over_sqrt10 = simde_mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_10); + y0i_over_sqrt10 = simde_mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_10); + y0r_three_over_sqrt10 = simde_mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_10); + y0i_three_over_sqrt10 = simde_mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_10); + y0r_three_over_sqrt10 = simde_mm256_slli_epi16(y0r_three_over_sqrt10, 1); + y0i_three_over_sqrt10 = simde_mm256_slli_epi16(y0i_three_over_sqrt10, 1); + + // Compute necessary combination of required terms + y0_p_1_1 = simde_mm256_adds_epi16(y0r_over_sqrt10, y0i_over_sqrt10); + y0_m_1_1 = simde_mm256_subs_epi16(y0r_over_sqrt10, y0i_over_sqrt10); + + y0_p_1_3 = simde_mm256_adds_epi16(y0r_over_sqrt10, y0i_three_over_sqrt10); + y0_m_1_3 = simde_mm256_subs_epi16(y0r_over_sqrt10, y0i_three_over_sqrt10); + + y0_p_3_1 = simde_mm256_adds_epi16(y0r_three_over_sqrt10, y0i_over_sqrt10); + y0_m_3_1 = simde_mm256_subs_epi16(y0r_three_over_sqrt10, y0i_over_sqrt10); + + y0_p_3_3 = simde_mm256_adds_epi16(y0r_three_over_sqrt10, y0i_three_over_sqrt10); + y0_m_3_3 = simde_mm256_subs_epi16(y0r_three_over_sqrt10, y0i_three_over_sqrt10); + + // Compute optimal interfering symbol magnitude + interference_abs_epi16_256(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + interference_abs_epi16_256(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + + // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude + prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); + prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); + prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); + prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); + prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); + prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); + prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); + prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); + prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); + prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); + prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); + prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); + prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); + prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); + prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); + prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); + + // squared interference magnitude times int. ch. power + square_a_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); + square_a_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3); + square_a_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1); + square_a_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3); + square_a_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1); + square_a_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3); + square_a_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1); + square_a_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3); + square_a_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1); + square_a_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3); + square_a_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1); + square_a_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3); + square_a_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1); + square_a_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3); + square_a_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1); + square_a_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3); + + // Computing different multiples of channel norms + ch_mag_over_10 = simde_mm256_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10); + ch_mag_over_2 = simde_mm256_mulhi_epi16(ch_mag_des, SQRT_10_OVER_FOUR); + ch_mag_over_2 = simde_mm256_slli_epi16(ch_mag_over_2, 1); + ch_mag_9_over_10 = simde_mm256_mulhi_epi16(ch_mag_des, NINE_OVER_TWO_SQRT_10); + ch_mag_9_over_10 = simde_mm256_slli_epi16(ch_mag_9_over_10, 2); + + /// Compute bit metrics (lambda) + + simde__m256i bit_met_p1_p1 = simde_mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); + bit_met_p1_p1 = simde_mm256_adds_epi16(bit_met_p1_p1, y0_p_1_1); + bit_met_p1_p1 = simde_mm256_subs_epi16(bit_met_p1_p1, ch_mag_over_10); + + simde__m256i bit_met_p1_p3 = simde_mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); + bit_met_p1_p3 = simde_mm256_adds_epi16(bit_met_p1_p3, y0_p_1_3); + bit_met_p1_p3 = simde_mm256_subs_epi16(bit_met_p1_p3, ch_mag_over_2); + + simde__m256i bit_met_p1_m1 = simde_mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); + bit_met_p1_m1 = simde_mm256_adds_epi16(bit_met_p1_m1, y0_m_1_1); + bit_met_p1_m1 = simde_mm256_subs_epi16(bit_met_p1_m1, ch_mag_over_10); + + simde__m256i bit_met_p1_m3 = simde_mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); + bit_met_p1_m3 = simde_mm256_adds_epi16(bit_met_p1_m3, y0_m_1_3); + bit_met_p1_m3 = simde_mm256_subs_epi16(bit_met_p1_m3, ch_mag_over_2); + + simde__m256i bit_met_p3_p1 = simde_mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); + bit_met_p3_p1 = simde_mm256_adds_epi16(bit_met_p3_p1, y0_p_3_1); + bit_met_p3_p1 = simde_mm256_subs_epi16(bit_met_p3_p1, ch_mag_over_2); + + simde__m256i bit_met_p3_p3 = simde_mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); + bit_met_p3_p3 = simde_mm256_adds_epi16(bit_met_p3_p3, y0_p_3_3); + bit_met_p3_p3 = simde_mm256_subs_epi16(bit_met_p3_p3, ch_mag_9_over_10); + + simde__m256i bit_met_p3_m1 = simde_mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); + bit_met_p3_m1 = simde_mm256_adds_epi16(bit_met_p3_m1, y0_m_3_1); + bit_met_p3_m1 = simde_mm256_subs_epi16(bit_met_p3_m1, ch_mag_over_2); + + simde__m256i bit_met_p3_m3 = simde_mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); + bit_met_p3_m3 = simde_mm256_adds_epi16(bit_met_p3_m3, y0_m_3_3); + bit_met_p3_m3 = simde_mm256_subs_epi16(bit_met_p3_m3, ch_mag_9_over_10); + + simde__m256i bit_met_m1_p1 = simde_mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); + bit_met_m1_p1 = simde_mm256_subs_epi16(bit_met_m1_p1, y0_m_1_1); + bit_met_m1_p1 = simde_mm256_subs_epi16(bit_met_m1_p1, ch_mag_over_10); + + simde__m256i bit_met_m1_p3 = simde_mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); + bit_met_m1_p3 = simde_mm256_subs_epi16(bit_met_m1_p3, y0_m_1_3); + bit_met_m1_p3 = simde_mm256_subs_epi16(bit_met_m1_p3, ch_mag_over_2); + + simde__m256i bit_met_m1_m1 = simde_mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); + bit_met_m1_m1 = simde_mm256_subs_epi16(bit_met_m1_m1, y0_p_1_1); + bit_met_m1_m1 = simde_mm256_subs_epi16(bit_met_m1_m1, ch_mag_over_10); + + simde__m256i bit_met_m1_m3 = simde_mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); + bit_met_m1_m3 = simde_mm256_subs_epi16(bit_met_m1_m3, y0_p_1_3); + bit_met_m1_m3 = simde_mm256_subs_epi16(bit_met_m1_m3, ch_mag_over_2); + + simde__m256i bit_met_m3_p1 = simde_mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); + bit_met_m3_p1 = simde_mm256_subs_epi16(bit_met_m3_p1, y0_m_3_1); + bit_met_m3_p1 = simde_mm256_subs_epi16(bit_met_m3_p1, ch_mag_over_2); + + simde__m256i bit_met_m3_p3 = simde_mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); + bit_met_m3_p3 = simde_mm256_subs_epi16(bit_met_m3_p3, y0_m_3_3); + bit_met_m3_p3 = simde_mm256_subs_epi16(bit_met_m3_p3, ch_mag_9_over_10); + + simde__m256i bit_met_m3_m1 = simde_mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); + bit_met_m3_m1 = simde_mm256_subs_epi16(bit_met_m3_m1, y0_p_3_1); + bit_met_m3_m1 = simde_mm256_subs_epi16(bit_met_m3_m1, ch_mag_over_2); + + simde__m256i bit_met_m3_m3 = simde_mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); + bit_met_m3_m3 = simde_mm256_subs_epi16(bit_met_m3_m3, y0_p_3_3); + bit_met_m3_m3 = simde_mm256_subs_epi16(bit_met_m3_m3, ch_mag_9_over_10); + + /// Compute the LLRs + + // LLR = lambda(c==1) - lambda(c==0) + + // LLR of the first bit: Bit = 1 + simde__m256i logmax_num_re0 = max_epi16_256(bit_met_m1_p1, + bit_met_m1_p3, + bit_met_m1_m1, + bit_met_m1_m3, + bit_met_m3_p1, + bit_met_m3_p3, + bit_met_m3_m1, + bit_met_m3_m3); + + // LLR of the first bit: Bit = 0 + simde__m256i logmax_den_re0 = max_epi16_256(bit_met_p1_p1, + bit_met_p1_p3, + bit_met_p1_m1, + bit_met_p1_m3, + bit_met_p3_p1, + bit_met_p3_p3, + bit_met_p3_m1, + bit_met_p3_m3); + + // LLR of the second bit: Bit = 1 + simde__m256i logmax_num_re1 = max_epi16_256(bit_met_p1_m1, + bit_met_p3_m1, + bit_met_m1_m1, + bit_met_m3_m1, + bit_met_p1_m3, + bit_met_p3_m3, + bit_met_m1_m3, + bit_met_m3_m3); + + // LLR of the second bit: Bit = 0 + simde__m256i logmax_den_re1 = max_epi16_256(bit_met_p1_p1, + bit_met_p3_p1, + bit_met_m1_p1, + bit_met_m3_p1, + bit_met_p1_p3, + bit_met_p3_p3, + bit_met_m1_p3, + bit_met_m3_p3); + + // LLR of the third bit: Bit = 1 + simde__m256i logmax_num_im0 = max_epi16_256(bit_met_m3_p1, + bit_met_m3_p3, + bit_met_m3_m1, + bit_met_m3_m3, + bit_met_p3_p1, + bit_met_p3_p3, + bit_met_p3_m1, + bit_met_p3_m3); + + // LLR of the third bit: Bit = 0 + simde__m256i logmax_den_im0 = max_epi16_256(bit_met_m1_p1, + bit_met_m1_p3, + bit_met_m1_m1, + bit_met_m1_m3, + bit_met_p1_p1, + bit_met_p1_p3, + bit_met_p1_m1, + bit_met_p1_m3); + + // LLR of the fourth bit: Bit = 1 + simde__m256i logmax_num_im1 = max_epi16_256(bit_met_p1_m3, + bit_met_p3_m3, + bit_met_m1_m3, + bit_met_m3_m3, + bit_met_p1_p3, + bit_met_p3_p3, + bit_met_m1_p3, + bit_met_m3_p3); + + // LLR of the fourth bit: Bit = 0 + simde__m256i logmax_den_im1 = max_epi16_256(bit_met_p1_m1, + bit_met_p3_m1, + bit_met_m1_m1, + bit_met_m3_m1, + bit_met_p1_p1, + bit_met_p3_p1, + bit_met_m1_p1, + bit_met_m3_p1); + + y0r = simde_mm256_subs_epi16(logmax_den_re0, logmax_num_re0); // LLR of first bit [L1(1), L1(2), L1(3), L1(4), L1(5), L1(6), L1(7), L1(8)...] + y1r = simde_mm256_subs_epi16(logmax_den_re1, logmax_num_re1); // LLR of second bit [L2(1), L2(2), L2(3), L2(4), L2(5), L2(6), L2(7), L2(8)...] + y0i = simde_mm256_subs_epi16(logmax_den_im0, logmax_num_im0); // LLR of third bit [L3(1), L3(2), L3(3), L3(4), L3(5), L3(6), L3(7), L3(8)...] + y1i = simde_mm256_subs_epi16(logmax_den_im1, logmax_num_im1); // LLR of fourth bit [L4(1), L4(2), L4(3), L4(4), L4(5), L4(6), L4(7), L4(8)...] + + // Pack LLRs in output + simde__m128i* y0r_128 = (simde__m128i *) &y0r; + simde__m128i* y1r_128 = (simde__m128i *) &y1r; + simde__m128i* y0i_128 = (simde__m128i *) &y0i; + simde__m128i* y1i_128 = (simde__m128i *) &y1i; + simde__m128i xmm0_128, xmm1_128, xmm2_128, xmm3_128; + xmm0_128 = simde_mm_unpacklo_epi16(y0r_128[0], y1r_128[0]); // [L1(1), L2(1), L1(2), L2(2), L1(3), L2(3), L1(4), L2(4)] + xmm1_128 = simde_mm_unpackhi_epi16(y0r_128[0], y1r_128[0]); // [L1(5), L2(5), L1(6), L2(6), L1(7), L2(7), L1(8), L2(8)] + xmm2_128 = simde_mm_unpacklo_epi16(y0i_128[0], y1i_128[0]); // [L3(1), L4(1), L3(2), L4(2), L3(3), L4(3), L3(4), L4(4)] + xmm3_128 = simde_mm_unpackhi_epi16(y0i_128[0], y1i_128[0]); // [L3(5), L4(5), L3(6), L4(6), L3(7), L4(7), L3(8), L4(8)] + simde__m128i* stream0_128i_out = (simde__m128i *) &stream0_256i_out[2 * i + 0]; + stream0_128i_out[0] = simde_mm_unpacklo_epi32(xmm0_128, xmm2_128); // 8 LLRs, 2 REs + stream0_128i_out[1] = simde_mm_unpackhi_epi32(xmm0_128, xmm2_128); // 8 LLRs, 2 REs + stream0_128i_out[2] = simde_mm_unpacklo_epi32(xmm1_128, xmm3_128); // 8 LLRs, 2 REs + stream0_128i_out[3] = simde_mm_unpackhi_epi32(xmm1_128, xmm3_128); // 8 LLRs, 2 REs + xmm0_128 = simde_mm_unpacklo_epi16(y0r_128[1], y1r_128[1]); // [L1(9), L2(9), L1(10), L2(10), L1(11), L2(11), L1(12), L2(12)] + xmm1_128 = simde_mm_unpackhi_epi16(y0r_128[1], y1r_128[1]); // [L1(13), L2(13), L1(14), L2(14), L1(15), L2(15), L1(16), L2(16)] + xmm2_128 = simde_mm_unpacklo_epi16(y0i_128[1], y1i_128[1]); // [L3(9), L4(9), L3(10), L4(10), L3(11), L4(11), L3(12), L4(12)] + xmm3_128 = simde_mm_unpackhi_epi16(y0i_128[1], y1i_128[1]); // [L3(13), L4(13), L3(14), L4(14), L3(15), L4(15), L3(16), L4(16)] + stream0_128i_out = (simde__m128i *) &stream0_256i_out[2 * i + 2]; + stream0_128i_out[0] = simde_mm_unpacklo_epi32(xmm0_128, xmm2_128); // 8 LLRs, 2 REs + stream0_128i_out[1] = simde_mm_unpackhi_epi32(xmm0_128, xmm2_128); // 8 LLRs, 2 REs + stream0_128i_out[2] = simde_mm_unpacklo_epi32(xmm1_128, xmm3_128); // 8 LLRs, 2 REs + stream0_128i_out[3] = simde_mm_unpackhi_epi32(xmm1_128, xmm3_128); // 8 LLRs, 2 REs + } +#endif simde_mm_empty(); simde_m_empty(); } -static const int16_t ones256[16] __attribute__((aligned(32))) = {0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff}; - -/// Auxiliary Makros - -// calculate interference magnitude -// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 46 -#define interference_abs_64qam_epi16_256(psi, int_ch_mag, int_two_ch_mag, int_three_ch_mag, a, c1, c3, c5, c7) \ - tmp_result = simde_mm256_cmpgt_epi16(int_two_ch_mag, psi); \ - tmp_result3 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); \ - tmp_result2 = simde_mm256_cmpgt_epi16(int_ch_mag, psi); \ - tmp_result = simde_mm256_xor_si256(tmp_result, tmp_result2); \ - tmp_result4 = simde_mm256_cmpgt_epi16(psi, int_three_ch_mag); \ - tmp_result3 = simde_mm256_xor_si256(tmp_result3, tmp_result4); \ - tmp_result = simde_mm256_and_si256(tmp_result, c3); \ - tmp_result2 = simde_mm256_and_si256(tmp_result2, c1); \ - tmp_result3 = simde_mm256_and_si256(tmp_result3, c5); \ - tmp_result4 = simde_mm256_and_si256(tmp_result4, c7); \ - tmp_result = simde_mm256_or_si256(tmp_result, tmp_result2); \ - tmp_result3 = simde_mm256_or_si256(tmp_result3, tmp_result4); \ - const simde__m256i a = simde_mm256_or_si256(tmp_result, tmp_result3); - -// calculates psi_a = psi_r*a_r + psi_i*a_i -#define prodsum_psi_a_epi16_256(psi_r, a_r, psi_i, a_i, psi_a) \ - tmp_result = simde_mm256_mulhi_epi16(psi_r, a_r); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(psi_i, a_i); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - simde__m256i psi_a = simde_mm256_adds_epi16(tmp_result, tmp_result2); - -// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM -#define square_a_64qam_epi16_256(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ - tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 3); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 3); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - const simde__m256i a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); - /* * This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are * 64QAM. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. @@ -1102,6 +1885,2516 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, c16_t *rho01, uint32_t length) { +#ifdef USE_128BIT + simde__m128i *rho01_256i = (simde__m128i *)rho01; + simde__m128i *stream0_256i_in = (simde__m128i *)stream0_in; + simde__m128i *stream1_256i_in = (simde__m128i *)stream1_in; + simde__m128i *ch_mag_256i = (simde__m128i *)ch_mag; + simde__m128i *ch_mag_256i_i = (simde__m128i *)ch_mag_i; + + simde__m128i ONE_OVER_SQRT_42 = simde_mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) + simde__m128i THREE_OVER_SQRT_42 = simde_mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) + simde__m128i FIVE_OVER_SQRT_42 = simde_mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) + simde__m128i SEVEN_OVER_SQRT_42 = simde_mm_set1_epi16(17697); // round(7/sqrt(42)*2^14) Q2.14 + simde__m128i ONE_OVER_SQRT_2 = simde_mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + simde__m128i ONE_OVER_SQRT_2_42 = simde_mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) + simde__m128i THREE_OVER_SQRT_2_42 = simde_mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) + simde__m128i FIVE_OVER_SQRT_2_42 = simde_mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) + simde__m128i SEVEN_OVER_SQRT_2_42 = simde_mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) + simde__m128i FORTYNINE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 + simde__m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 + simde__m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) + simde__m128i TWENTYNINE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 + simde__m128i SEVENTEEN_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) + simde__m128i NINE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) + simde__m128i THIRTEEN_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) + simde__m128i FIVE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) + simde__m128i ONE_OVER_FOUR_SQRT_42 = simde_mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) + simde__m128i SQRT_42_OVER_FOUR = simde_mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 + + simde__m128i ch_mag_des; + simde__m128i ch_mag_int; + simde__m128i ch_mag_98_over_42_with_sigma2; + simde__m128i ch_mag_74_over_42_with_sigma2; + simde__m128i ch_mag_58_over_42_with_sigma2; + simde__m128i ch_mag_50_over_42_with_sigma2; + simde__m128i ch_mag_34_over_42_with_sigma2; + simde__m128i ch_mag_18_over_42_with_sigma2; + simde__m128i ch_mag_26_over_42_with_sigma2; + simde__m128i ch_mag_10_over_42_with_sigma2; + simde__m128i ch_mag_2_over_42_with_sigma2; + simde__m128i y0r_one_over_sqrt_21; + simde__m128i y0r_three_over_sqrt_21; + simde__m128i y0r_five_over_sqrt_21; + simde__m128i y0r_seven_over_sqrt_21; + simde__m128i y0i_one_over_sqrt_21; + simde__m128i y0i_three_over_sqrt_21; + simde__m128i y0i_five_over_sqrt_21; + simde__m128i y0i_seven_over_sqrt_21; + simde__m128i ch_mag_int_with_sigma2; + simde__m128i two_ch_mag_int_with_sigma2; + simde__m128i three_ch_mag_int_with_sigma2; + + for (int i = 0; i < length >> 2; i += 2) { + + // Get rho + simde__m128i xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; + simde_mm128_separate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i + 1]); + + simde__m128i rho_rpi = simde_mm_adds_epi16(xmm2, xmm3); // rho = Re(rho) + Im(rho) + simde__m128i rho_rmi = simde_mm_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) + + // Compute the different rhos + simde__m128i rho_rpi_1_1 = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); + simde__m128i rho_rmi_1_1 = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); + simde__m128i rho_rpi_3_3 = simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); + simde__m128i rho_rmi_3_3 = simde_mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); + simde__m128i rho_rpi_5_5 = simde_mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); + simde__m128i rho_rmi_5_5 = simde_mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); + simde__m128i rho_rpi_7_7 = simde_mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); + simde__m128i rho_rmi_7_7 = simde_mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); + + rho_rpi_5_5 = simde_mm_slli_epi16(rho_rpi_5_5, 1); + rho_rmi_5_5 = simde_mm_slli_epi16(rho_rmi_5_5, 1); + rho_rpi_7_7 = simde_mm_slli_epi16(rho_rpi_7_7, 2); + rho_rmi_7_7 = simde_mm_slli_epi16(rho_rmi_7_7, 2); + + xmm4 = simde_mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_42); + xmm5 = simde_mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_42); + xmm6 = simde_mm_mulhi_epi16(xmm3, THREE_OVER_SQRT_42); + xmm7 = simde_mm_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42); + xmm8 = simde_mm_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42); + xmm7 = simde_mm_slli_epi16(xmm7, 1); + xmm8 = simde_mm_slli_epi16(xmm8, 2); + + simde__m128i rho_rpi_1_3 = simde_mm_adds_epi16(xmm4, xmm6); + simde__m128i rho_rmi_1_3 = simde_mm_subs_epi16(xmm4, xmm6); + simde__m128i rho_rpi_1_5 = simde_mm_adds_epi16(xmm4, xmm7); + simde__m128i rho_rmi_1_5 = simde_mm_subs_epi16(xmm4, xmm7); + simde__m128i rho_rpi_1_7 = simde_mm_adds_epi16(xmm4, xmm8); + simde__m128i rho_rmi_1_7 = simde_mm_subs_epi16(xmm4, xmm8); + + xmm4 = simde_mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_42); + simde__m128i rho_rpi_3_1 = simde_mm_adds_epi16(xmm4, xmm5); + simde__m128i rho_rmi_3_1 = simde_mm_subs_epi16(xmm4, xmm5); + simde__m128i rho_rpi_3_5 = simde_mm_adds_epi16(xmm4, xmm7); + simde__m128i rho_rmi_3_5 = simde_mm_subs_epi16(xmm4, xmm7); + simde__m128i rho_rpi_3_7 = simde_mm_adds_epi16(xmm4, xmm8); + simde__m128i rho_rmi_3_7 = simde_mm_subs_epi16(xmm4, xmm8); + + xmm4 = simde_mm_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42); + xmm4 = simde_mm_slli_epi16(xmm4, 1); + simde__m128i rho_rpi_5_1 = simde_mm_adds_epi16(xmm4, xmm5); + simde__m128i rho_rmi_5_1 = simde_mm_subs_epi16(xmm4, xmm5); + simde__m128i rho_rpi_5_3 = simde_mm_adds_epi16(xmm4, xmm6); + simde__m128i rho_rmi_5_3 = simde_mm_subs_epi16(xmm4, xmm6); + simde__m128i rho_rpi_5_7 = simde_mm_adds_epi16(xmm4, xmm8); + simde__m128i rho_rmi_5_7 = simde_mm_subs_epi16(xmm4, xmm8); + + xmm4 = simde_mm_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42); + xmm4 = simde_mm_slli_epi16(xmm4, 2); + simde__m128i rho_rpi_7_1 = simde_mm_adds_epi16(xmm4, xmm5); + simde__m128i rho_rmi_7_1 = simde_mm_subs_epi16(xmm4, xmm5); + simde__m128i rho_rpi_7_3 = simde_mm_adds_epi16(xmm4, xmm6); + simde__m128i rho_rmi_7_3 = simde_mm_subs_epi16(xmm4, xmm6); + simde__m128i rho_rpi_7_5 = simde_mm_adds_epi16(xmm4, xmm7); + simde__m128i rho_rmi_7_5 = simde_mm_subs_epi16(xmm4, xmm7); + + // Rearrange interfering MF output + simde__m128i y1r, y1i, xmm0; + simde_mm128_separate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i + 1]); + + // Psi_r calculation from rho_rpi or rho_rmi + xmm0 = simde_mm_set1_epi16(0); // ZERO for abs_pi16 + xmm2 = simde_mm_subs_epi16(rho_rpi_7_7, y1r); + + simde__m128i psi_r_p7_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_5, y1r); + simde__m128i psi_r_p7_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_3, y1r); + simde__m128i psi_r_p7_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_1, y1r); + simde__m128i psi_r_p7_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_1, y1r); + simde__m128i psi_r_p7_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_3, y1r); + simde__m128i psi_r_p7_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_5, y1r); + simde__m128i psi_r_p7_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_7, y1r); + simde__m128i psi_r_p7_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_7, y1r); + simde__m128i psi_r_p5_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_5, y1r); + simde__m128i psi_r_p5_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_3, y1r); + simde__m128i psi_r_p5_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_1, y1r); + simde__m128i psi_r_p5_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_1, y1r); + simde__m128i psi_r_p5_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_3, y1r); + simde__m128i psi_r_p5_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_5, y1r); + simde__m128i psi_r_p5_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_7, y1r); + simde__m128i psi_r_p5_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_7, y1r); + simde__m128i psi_r_p3_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_5, y1r); + simde__m128i psi_r_p3_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1r); + simde__m128i psi_r_p3_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1r); + simde__m128i psi_r_p3_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1r); + simde__m128i psi_r_p3_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1r); + simde__m128i psi_r_p3_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_5, y1r); + simde__m128i psi_r_p3_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_7, y1r); + simde__m128i psi_r_p3_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_7, y1r); + simde__m128i psi_r_p1_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_5, y1r); + simde__m128i psi_r_p1_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1r); + simde__m128i psi_r_p1_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1r); + simde__m128i psi_r_p1_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1r); + simde__m128i psi_r_p1_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1r); + simde__m128i psi_r_p1_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_5, y1r); + simde__m128i psi_r_p1_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_7, y1r); + simde__m128i psi_r_p1_m7 = simde_mm_abs_epi16(xmm2); + + xmm2 = simde_mm_adds_epi16(rho_rmi_1_7, y1r); + simde__m128i psi_r_m1_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_5, y1r); + simde__m128i psi_r_m1_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_3, y1r); + simde__m128i psi_r_m1_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_1, y1r); + simde__m128i psi_r_m1_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1r); + simde__m128i psi_r_m1_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1r); + simde__m128i psi_r_m1_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_5, y1r); + simde__m128i psi_r_m1_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_7, y1r); + simde__m128i psi_r_m1_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_7, y1r); + simde__m128i psi_r_m3_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_5, y1r); + simde__m128i psi_r_m3_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_3, y1r); + simde__m128i psi_r_m3_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_1, y1r); + simde__m128i psi_r_m3_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1r); + simde__m128i psi_r_m3_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1r); + simde__m128i psi_r_m3_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_5, y1r); + simde__m128i psi_r_m3_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_7, y1r); + simde__m128i psi_r_m3_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_7, y1r); + simde__m128i psi_r_m5_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_5, y1r); + simde__m128i psi_r_m5_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_3, y1r); + simde__m128i psi_r_m5_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_1, y1r); + simde__m128i psi_r_m5_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_1, y1r); + simde__m128i psi_r_m5_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_3, y1r); + simde__m128i psi_r_m5_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_5, y1r); + simde__m128i psi_r_m5_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_7, y1r); + simde__m128i psi_r_m5_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_7, y1r); + simde__m128i psi_r_m7_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_5, y1r); + simde__m128i psi_r_m7_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_3, y1r); + simde__m128i psi_r_m7_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_1, y1r); + simde__m128i psi_r_m7_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_1, y1r); + simde__m128i psi_r_m7_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_3, y1r); + simde__m128i psi_r_m7_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_5, y1r); + simde__m128i psi_r_m7_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_7, y1r); + simde__m128i psi_r_m7_m7 = simde_mm_abs_epi16(xmm2); + + // simde__m128i Psi_i calculation from rho_rpi or rho_rmi + xmm2 = simde_mm_subs_epi16(rho_rmi_7_7, y1i); + simde__m128i psi_i_p7_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_7, y1i); + simde__m128i psi_i_p7_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_7, y1i); + simde__m128i psi_i_p7_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_7, y1i); + simde__m128i psi_i_p7_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_7, y1i); + simde__m128i psi_i_p7_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_7, y1i); + simde__m128i psi_i_p7_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_7, y1i); + simde__m128i psi_i_p7_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_7, y1i); + simde__m128i psi_i_p7_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_5, y1i); + simde__m128i psi_i_p5_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_5, y1i); + simde__m128i psi_i_p5_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_5, y1i); + simde__m128i psi_i_p5_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_5, y1i); + simde__m128i psi_i_p5_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_5, y1i); + simde__m128i psi_i_p5_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_5, y1i); + simde__m128i psi_i_p5_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_5, y1i); + simde__m128i psi_i_p5_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_5, y1i); + simde__m128i psi_i_p5_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_3, y1i); + simde__m128i psi_i_p3_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_3, y1i); + simde__m128i psi_i_p3_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1i); + simde__m128i psi_i_p3_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1i); + simde__m128i psi_i_p3_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1i); + simde__m128i psi_i_p3_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1i); + simde__m128i psi_i_p3_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_3, y1i); + simde__m128i psi_i_p3_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_3, y1i); + simde__m128i psi_i_p3_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_7_1, y1i); + simde__m128i psi_i_p1_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_5_1, y1i); + simde__m128i psi_i_p1_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1i); + simde__m128i psi_i_p1_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1i); + simde__m128i psi_i_p1_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1i); + simde__m128i psi_i_p1_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1i); + simde__m128i psi_i_p1_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_5_1, y1i); + simde__m128i psi_i_p1_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rpi_7_1, y1i); + simde__m128i psi_i_p1_m7 = simde_mm_abs_epi16(xmm2); + + xmm2 = simde_mm_subs_epi16(rho_rpi_7_1, y1i); + simde__m128i psi_i_m1_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_1, y1i); + simde__m128i psi_i_m1_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1i); + simde__m128i psi_i_m1_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1i); + simde__m128i psi_i_m1_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_1, y1i); + simde__m128i psi_i_m1_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_1, y1i); + simde__m128i psi_i_m1_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_1, y1i); + simde__m128i psi_i_m1_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_1, y1i); + simde__m128i psi_i_m1_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_3, y1i); + simde__m128i psi_i_m3_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_3, y1i); + simde__m128i psi_i_m3_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1i); + simde__m128i psi_i_m3_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1i); + simde__m128i psi_i_m3_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_3, y1i); + simde__m128i psi_i_m3_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_3, y1i); + simde__m128i psi_i_m3_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_3, y1i); + simde__m128i psi_i_m3_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_3, y1i); + simde__m128i psi_i_m3_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_5, y1i); + simde__m128i psi_i_m5_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_5, y1i); + simde__m128i psi_i_m5_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_5, y1i); + simde__m128i psi_i_m5_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_5, y1i); + simde__m128i psi_i_m5_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_5, y1i); + simde__m128i psi_i_m5_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_5, y1i); + simde__m128i psi_i_m5_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_5, y1i); + simde__m128i psi_i_m5_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_5, y1i); + simde__m128i psi_i_m5_m7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_7_7, y1i); + simde__m128i psi_i_m7_p7 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_5_7, y1i); + simde__m128i psi_i_m7_p5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_3_7, y1i); + simde__m128i psi_i_m7_p3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_subs_epi16(rho_rpi_1_7, y1i); + simde__m128i psi_i_m7_p1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_1_7, y1i); + simde__m128i psi_i_m7_m1 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_3_7, y1i); + simde__m128i psi_i_m7_m3 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_5_7, y1i); + simde__m128i psi_i_m7_m5 = simde_mm_abs_epi16(xmm2); + xmm2 = simde_mm_adds_epi16(rho_rmi_7_7, y1i); + simde__m128i psi_i_m7_m7 = simde_mm_abs_epi16(xmm2); + + // Rearrange desired MF output + simde__m128i y0r, y0i; + simde_mm128_separate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i + 1]); + + // Rearrange desired channel magnitudes + // [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2),...,,|h|^2(7),|h|^2(7)]*(2/sqrt(10)) + // xmm2 is dummy variable that contains the same values as ch_mag_des + simde_mm128_separate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i + 1]); + + // Rearrange interfering channel magnitudes + simde_mm128_separate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i + 1]); + + y0r_one_over_sqrt_21 = simde_mm_mulhi_epi16(y0r, ONE_OVER_SQRT_42); + y0r_three_over_sqrt_21 = simde_mm_mulhi_epi16(y0r, THREE_OVER_SQRT_42); + y0r_five_over_sqrt_21 = simde_mm_mulhi_epi16(y0r, FIVE_OVER_SQRT_42); + y0r_five_over_sqrt_21 = simde_mm_slli_epi16(y0r_five_over_sqrt_21, 1); + y0r_seven_over_sqrt_21 = simde_mm_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42); + y0r_seven_over_sqrt_21 = simde_mm_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14 + + y0i_one_over_sqrt_21 = simde_mm_mulhi_epi16(y0i, ONE_OVER_SQRT_42); + y0i_three_over_sqrt_21 = simde_mm_mulhi_epi16(y0i, THREE_OVER_SQRT_42); + y0i_five_over_sqrt_21 = simde_mm_mulhi_epi16(y0i, FIVE_OVER_SQRT_42); + y0i_five_over_sqrt_21 = simde_mm_slli_epi16(y0i_five_over_sqrt_21, 1); + y0i_seven_over_sqrt_21 = simde_mm_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42); + y0i_seven_over_sqrt_21 = simde_mm_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14 + + simde__m128i y0_p_7_1 = simde_mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_p_7_3 = simde_mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_p_7_5 = simde_mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_p_7_7 = simde_mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_p_5_1 = simde_mm_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_p_5_3 = simde_mm_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_p_5_5 = simde_mm_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_p_5_7 = simde_mm_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_p_3_1 = simde_mm_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_p_3_3 = simde_mm_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_p_3_5 = simde_mm_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_p_3_7 = simde_mm_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_p_1_1 = simde_mm_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_p_1_3 = simde_mm_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_p_1_5 = simde_mm_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_p_1_7 = simde_mm_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); + + simde__m128i y0_m_1_1 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_m_1_3 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_m_1_5 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_m_1_7 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_m_3_1 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_m_3_3 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_m_3_5 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_m_3_7 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_m_5_1 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_m_5_3 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_m_5_5 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_m_5_7 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); + simde__m128i y0_m_7_1 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); + simde__m128i y0_m_7_3 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); + simde__m128i y0_m_7_5 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); + simde__m128i y0_m_7_7 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); + + // Detection of interference term + ch_mag_int_with_sigma2 = simde_mm_srai_epi16(ch_mag_int, 1); // *2 + two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 + three_ch_mag_int_with_sigma2 = simde_mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 + simde__m128i tmp_result, tmp_result2, tmp_result3, tmp_result4; + interference_abs_64qam_epi16(psi_r_p7_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p7_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p7_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p5_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p5_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p3_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p3_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_p1_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_p1_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m1_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m1_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m3_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m3_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m5_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m5_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_r_m7_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_r_m7_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + + interference_abs_64qam_epi16(psi_i_p7_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p7_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p7_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p5_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p5_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p3_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p3_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_p1_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_p1_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m1_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m1_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m3_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m3_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m5_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m5_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_p7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_p7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_p5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_p5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_p3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_p3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_p1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_p1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_m1, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_m1, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_m3, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_m3, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_m5, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_m5, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + interference_abs_64qam_epi16(psi_i_m7_m7, + ch_mag_int_with_sigma2, + two_ch_mag_int_with_sigma2, + three_ch_mag_int_with_sigma2, + a_i_m7_m7, + ONE_OVER_SQRT_2_42, + THREE_OVER_SQRT_2_42, + FIVE_OVER_SQRT_2_42, + SEVEN_OVER_SQRT_2_42); + + // Calculation of a group of two terms in the bit metric involving product of psi and interference + prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7); + prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5); + prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3); + prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1); + prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1); + prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3); + prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5); + prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7); + prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7); + prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5); + prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3); + prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1); + prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1); + prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3); + prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5); + prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7); + prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7); + prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5); + prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); + prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); + prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); + prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); + prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5); + prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7); + prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7); + prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5); + prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); + prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); + prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); + prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); + prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5); + prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7); + prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7); + prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5); + prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); + prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); + prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); + prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); + prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5); + prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7); + prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7); + prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5); + prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); + prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); + prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); + prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); + prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5); + prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7); + prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7); + prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5); + prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3); + prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1); + prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1); + prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3); + prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5); + prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7); + prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7); + prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5); + prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3); + prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1); + prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1); + prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3); + prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5); + prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7); + + // Multiply by sqrt(2) + psi_a_p7_p7 = simde_mm_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); + psi_a_p7_p7 = simde_mm_slli_epi16(psi_a_p7_p7, 2); + psi_a_p7_p5 = simde_mm_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2); + psi_a_p7_p5 = simde_mm_slli_epi16(psi_a_p7_p5, 2); + psi_a_p7_p3 = simde_mm_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2); + psi_a_p7_p3 = simde_mm_slli_epi16(psi_a_p7_p3, 2); + psi_a_p7_p1 = simde_mm_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2); + psi_a_p7_p1 = simde_mm_slli_epi16(psi_a_p7_p1, 2); + psi_a_p7_m1 = simde_mm_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2); + psi_a_p7_m1 = simde_mm_slli_epi16(psi_a_p7_m1, 2); + psi_a_p7_m3 = simde_mm_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2); + psi_a_p7_m3 = simde_mm_slli_epi16(psi_a_p7_m3, 2); + psi_a_p7_m5 = simde_mm_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2); + psi_a_p7_m5 = simde_mm_slli_epi16(psi_a_p7_m5, 2); + psi_a_p7_m7 = simde_mm_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2); + psi_a_p7_m7 = simde_mm_slli_epi16(psi_a_p7_m7, 2); + psi_a_p5_p7 = simde_mm_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2); + psi_a_p5_p7 = simde_mm_slli_epi16(psi_a_p5_p7, 2); + psi_a_p5_p5 = simde_mm_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2); + psi_a_p5_p5 = simde_mm_slli_epi16(psi_a_p5_p5, 2); + psi_a_p5_p3 = simde_mm_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2); + psi_a_p5_p3 = simde_mm_slli_epi16(psi_a_p5_p3, 2); + psi_a_p5_p1 = simde_mm_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2); + psi_a_p5_p1 = simde_mm_slli_epi16(psi_a_p5_p1, 2); + psi_a_p5_m1 = simde_mm_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2); + psi_a_p5_m1 = simde_mm_slli_epi16(psi_a_p5_m1, 2); + psi_a_p5_m3 = simde_mm_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2); + psi_a_p5_m3 = simde_mm_slli_epi16(psi_a_p5_m3, 2); + psi_a_p5_m5 = simde_mm_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2); + psi_a_p5_m5 = simde_mm_slli_epi16(psi_a_p5_m5, 2); + psi_a_p5_m7 = simde_mm_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2); + psi_a_p5_m7 = simde_mm_slli_epi16(psi_a_p5_m7, 2); + psi_a_p3_p7 = simde_mm_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2); + psi_a_p3_p7 = simde_mm_slli_epi16(psi_a_p3_p7, 2); + psi_a_p3_p5 = simde_mm_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2); + psi_a_p3_p5 = simde_mm_slli_epi16(psi_a_p3_p5, 2); + psi_a_p3_p3 = simde_mm_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2); + psi_a_p3_p3 = simde_mm_slli_epi16(psi_a_p3_p3, 2); + psi_a_p3_p1 = simde_mm_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2); + psi_a_p3_p1 = simde_mm_slli_epi16(psi_a_p3_p1, 2); + psi_a_p3_m1 = simde_mm_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2); + psi_a_p3_m1 = simde_mm_slli_epi16(psi_a_p3_m1, 2); + psi_a_p3_m3 = simde_mm_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2); + psi_a_p3_m3 = simde_mm_slli_epi16(psi_a_p3_m3, 2); + psi_a_p3_m5 = simde_mm_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2); + psi_a_p3_m5 = simde_mm_slli_epi16(psi_a_p3_m5, 2); + psi_a_p3_m7 = simde_mm_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2); + psi_a_p3_m7 = simde_mm_slli_epi16(psi_a_p3_m7, 2); + psi_a_p1_p7 = simde_mm_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2); + psi_a_p1_p7 = simde_mm_slli_epi16(psi_a_p1_p7, 2); + psi_a_p1_p5 = simde_mm_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2); + psi_a_p1_p5 = simde_mm_slli_epi16(psi_a_p1_p5, 2); + psi_a_p1_p3 = simde_mm_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2); + psi_a_p1_p3 = simde_mm_slli_epi16(psi_a_p1_p3, 2); + psi_a_p1_p1 = simde_mm_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2); + psi_a_p1_p1 = simde_mm_slli_epi16(psi_a_p1_p1, 2); + psi_a_p1_m1 = simde_mm_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2); + psi_a_p1_m1 = simde_mm_slli_epi16(psi_a_p1_m1, 2); + psi_a_p1_m3 = simde_mm_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2); + psi_a_p1_m3 = simde_mm_slli_epi16(psi_a_p1_m3, 2); + psi_a_p1_m5 = simde_mm_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2); + psi_a_p1_m5 = simde_mm_slli_epi16(psi_a_p1_m5, 2); + psi_a_p1_m7 = simde_mm_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2); + psi_a_p1_m7 = simde_mm_slli_epi16(psi_a_p1_m7, 2); + psi_a_m1_p7 = simde_mm_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2); + psi_a_m1_p7 = simde_mm_slli_epi16(psi_a_m1_p7, 2); + psi_a_m1_p5 = simde_mm_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2); + psi_a_m1_p5 = simde_mm_slli_epi16(psi_a_m1_p5, 2); + psi_a_m1_p3 = simde_mm_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2); + psi_a_m1_p3 = simde_mm_slli_epi16(psi_a_m1_p3, 2); + psi_a_m1_p1 = simde_mm_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2); + psi_a_m1_p1 = simde_mm_slli_epi16(psi_a_m1_p1, 2); + psi_a_m1_m1 = simde_mm_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2); + psi_a_m1_m1 = simde_mm_slli_epi16(psi_a_m1_m1, 2); + psi_a_m1_m3 = simde_mm_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2); + psi_a_m1_m3 = simde_mm_slli_epi16(psi_a_m1_m3, 2); + psi_a_m1_m5 = simde_mm_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2); + psi_a_m1_m5 = simde_mm_slli_epi16(psi_a_m1_m5, 2); + psi_a_m1_m7 = simde_mm_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2); + psi_a_m1_m7 = simde_mm_slli_epi16(psi_a_m1_m7, 2); + psi_a_m3_p7 = simde_mm_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2); + psi_a_m3_p7 = simde_mm_slli_epi16(psi_a_m3_p7, 2); + psi_a_m3_p5 = simde_mm_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2); + psi_a_m3_p5 = simde_mm_slli_epi16(psi_a_m3_p5, 2); + psi_a_m3_p3 = simde_mm_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2); + psi_a_m3_p3 = simde_mm_slli_epi16(psi_a_m3_p3, 2); + psi_a_m3_p1 = simde_mm_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2); + psi_a_m3_p1 = simde_mm_slli_epi16(psi_a_m3_p1, 2); + psi_a_m3_m1 = simde_mm_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2); + psi_a_m3_m1 = simde_mm_slli_epi16(psi_a_m3_m1, 2); + psi_a_m3_m3 = simde_mm_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2); + psi_a_m3_m3 = simde_mm_slli_epi16(psi_a_m3_m3, 2); + psi_a_m3_m5 = simde_mm_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2); + psi_a_m3_m5 = simde_mm_slli_epi16(psi_a_m3_m5, 2); + psi_a_m3_m7 = simde_mm_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2); + psi_a_m3_m7 = simde_mm_slli_epi16(psi_a_m3_m7, 2); + psi_a_m5_p7 = simde_mm_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2); + psi_a_m5_p7 = simde_mm_slli_epi16(psi_a_m5_p7, 2); + psi_a_m5_p5 = simde_mm_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2); + psi_a_m5_p5 = simde_mm_slli_epi16(psi_a_m5_p5, 2); + psi_a_m5_p3 = simde_mm_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2); + psi_a_m5_p3 = simde_mm_slli_epi16(psi_a_m5_p3, 2); + psi_a_m5_p1 = simde_mm_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2); + psi_a_m5_p1 = simde_mm_slli_epi16(psi_a_m5_p1, 2); + psi_a_m5_m1 = simde_mm_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2); + psi_a_m5_m1 = simde_mm_slli_epi16(psi_a_m5_m1, 2); + psi_a_m5_m3 = simde_mm_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2); + psi_a_m5_m3 = simde_mm_slli_epi16(psi_a_m5_m3, 2); + psi_a_m5_m5 = simde_mm_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2); + psi_a_m5_m5 = simde_mm_slli_epi16(psi_a_m5_m5, 2); + psi_a_m5_m7 = simde_mm_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2); + psi_a_m5_m7 = simde_mm_slli_epi16(psi_a_m5_m7, 2); + psi_a_m7_p7 = simde_mm_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2); + psi_a_m7_p7 = simde_mm_slli_epi16(psi_a_m7_p7, 2); + psi_a_m7_p5 = simde_mm_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2); + psi_a_m7_p5 = simde_mm_slli_epi16(psi_a_m7_p5, 2); + psi_a_m7_p3 = simde_mm_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2); + psi_a_m7_p3 = simde_mm_slli_epi16(psi_a_m7_p3, 2); + psi_a_m7_p1 = simde_mm_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2); + psi_a_m7_p1 = simde_mm_slli_epi16(psi_a_m7_p1, 2); + psi_a_m7_m1 = simde_mm_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2); + psi_a_m7_m1 = simde_mm_slli_epi16(psi_a_m7_m1, 2); + psi_a_m7_m3 = simde_mm_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2); + psi_a_m7_m3 = simde_mm_slli_epi16(psi_a_m7_m3, 2); + psi_a_m7_m5 = simde_mm_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2); + psi_a_m7_m5 = simde_mm_slli_epi16(psi_a_m7_m5, 2); + psi_a_m7_m7 = simde_mm_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2); + psi_a_m7_m7 = simde_mm_slli_epi16(psi_a_m7_m7, 2); + + // Calculation of a group of two terms in the bit metric involving squares of interference + square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7); + square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5); + square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3); + square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1); + square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1); + square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3); + square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5); + square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7); + square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7); + square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5); + square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3); + square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1); + square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1); + square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3); + square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5); + square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7); + square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7); + square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5); + square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3); + square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1); + square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1); + square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3); + square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5); + square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7); + square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7); + square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5); + square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3); + square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1); + square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1); + square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3); + square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5); + square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7); + square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7); + square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5); + square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3); + square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1); + square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1); + square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3); + square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5); + square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7); + square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7); + square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5); + square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3); + square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1); + square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1); + square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3); + square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5); + square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7); + square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7); + square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5); + square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3); + square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1); + square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1); + square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3); + square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5); + square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7); + square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7); + square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5); + square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3); + square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1); + square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1); + square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3); + square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5); + square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7); + + // Computing different multiples of ||h0||^2 + // x=1, y=1 + ch_mag_2_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, ONE_OVER_FOUR_SQRT_42); + ch_mag_2_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_2_over_42_with_sigma2, 1); + // x=1, y=3 + ch_mag_10_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, FIVE_OVER_FOUR_SQRT_42); + ch_mag_10_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_10_over_42_with_sigma2, 1); + // x=1, x=5 + ch_mag_26_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, THIRTEEN_OVER_FOUR_SQRT_42); + ch_mag_26_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_26_over_42_with_sigma2, 1); + // x=1, y=7 + ch_mag_50_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); + ch_mag_50_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + // x=3, y=3 + ch_mag_18_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, NINE_OVER_FOUR_SQRT_42); + ch_mag_18_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_18_over_42_with_sigma2, 1); + // x=3, y=5 + ch_mag_34_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, SEVENTEEN_OVER_FOUR_SQRT_42); + ch_mag_34_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_34_over_42_with_sigma2, 1); + // x=3, y=7 + ch_mag_58_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYNINE_OVER_FOUR_SQRT_42); + ch_mag_58_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_58_over_42_with_sigma2, 2); + // x=5, y=5 + ch_mag_50_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); + ch_mag_50_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + // x=5, y=7 + ch_mag_74_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, THIRTYSEVEN_OVER_FOUR_SQRT_42); + ch_mag_74_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_74_over_42_with_sigma2, 2); + // x=7, y=7 + ch_mag_98_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, FORTYNINE_OVER_FOUR_SQRT_42); + ch_mag_98_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); + + // Computing Metrics + xmm0 = simde_mm_subs_epi16(psi_a_p7_p7, a_sq_p7_p7); + simde__m128i xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_7); + simde__m128i bit_met_p7_p7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_p5, a_sq_p7_p5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_5); + simde__m128i bit_met_p7_p5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_p3, a_sq_p7_p3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_3); + simde__m128i bit_met_p7_p3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_p1, a_sq_p7_p1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_1); + simde__m128i bit_met_p7_p1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_m1, a_sq_p7_m1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_1); + simde__m128i bit_met_p7_m1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_m3, a_sq_p7_m3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_3); + simde__m128i bit_met_p7_m3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_m5, a_sq_p7_m5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_5); + simde__m128i bit_met_p7_m5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p7_m7, a_sq_p7_m7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_7); + simde__m128i bit_met_p7_m7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_p7, a_sq_p5_p7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_7); + simde__m128i bit_met_p5_p7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_p5, a_sq_p5_p5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_5); + simde__m128i bit_met_p5_p5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_p3, a_sq_p5_p3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_3); + simde__m128i bit_met_p5_p3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_p1, a_sq_p5_p1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_1); + simde__m128i bit_met_p5_p1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_m1, a_sq_p5_m1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_1); + simde__m128i bit_met_p5_m1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_m3, a_sq_p5_m3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_3); + simde__m128i bit_met_p5_m3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_m5, a_sq_p5_m5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_5); + simde__m128i bit_met_p5_m5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p5_m7, a_sq_p5_m7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_7); + simde__m128i bit_met_p5_m7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_p7, a_sq_p3_p7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_7); + simde__m128i bit_met_p3_p7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_p5, a_sq_p3_p5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_5); + simde__m128i bit_met_p3_p5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_3); + simde__m128i bit_met_p3_p3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_1); + simde__m128i bit_met_p3_p1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_1); + simde__m128i bit_met_p3_m1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_3); + simde__m128i bit_met_p3_m3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_m5, a_sq_p3_m5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_5); + simde__m128i bit_met_p3_m5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p3_m7, a_sq_p3_m7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_7); + simde__m128i bit_met_p3_m7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_p7, a_sq_p1_p7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_7); + simde__m128i bit_met_p1_p7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_p5, a_sq_p1_p5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_5); + simde__m128i bit_met_p1_p5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_3); + simde__m128i bit_met_p1_p3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_1); + simde__m128i bit_met_p1_p1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_1); + simde__m128i bit_met_p1_m1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_3); + simde__m128i bit_met_p1_m3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_m5, a_sq_p1_m5); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_5); + simde__m128i bit_met_p1_m5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_p1_m7, a_sq_p1_m7); + xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_7); + simde__m128i bit_met_p1_m7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm0 = simde_mm_subs_epi16(psi_a_m1_p7, a_sq_m1_p7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_7); + simde__m128i bit_met_m1_p7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_p5, a_sq_m1_p5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_5); + simde__m128i bit_met_m1_p5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_3); + simde__m128i bit_met_m1_p3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_1); + simde__m128i bit_met_m1_p1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_1); + simde__m128i bit_met_m1_m1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_3); + simde__m128i bit_met_m1_m3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_m5, a_sq_m1_m5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_5); + simde__m128i bit_met_m1_m5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m1_m7, a_sq_m1_m7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_7); + simde__m128i bit_met_m1_m7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_p7, a_sq_m3_p7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_7); + simde__m128i bit_met_m3_p7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_p5, a_sq_m3_p5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_5); + simde__m128i bit_met_m3_p5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_3); + simde__m128i bit_met_m3_p3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_1); + simde__m128i bit_met_m3_p1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_1); + simde__m128i bit_met_m3_m1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_3); + simde__m128i bit_met_m3_m3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_m5, a_sq_m3_m5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_5); + simde__m128i bit_met_m3_m5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m3_m7, a_sq_m3_m7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_7); + simde__m128i bit_met_m3_m7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_p7, a_sq_m5_p7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_7); + simde__m128i bit_met_m5_p7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_p5, a_sq_m5_p5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_5); + simde__m128i bit_met_m5_p5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_p3, a_sq_m5_p3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_3); + simde__m128i bit_met_m5_p3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_p1, a_sq_m5_p1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_1); + simde__m128i bit_met_m5_p1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_m1, a_sq_m5_m1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_1); + simde__m128i bit_met_m5_m1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_m3, a_sq_m5_m3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_3); + simde__m128i bit_met_m5_m3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_m5, a_sq_m5_m5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_5); + simde__m128i bit_met_m5_m5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m5_m7, a_sq_m5_m7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_7); + simde__m128i bit_met_m5_m7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_p7, a_sq_m7_p7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_7); + simde__m128i bit_met_m7_p7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_p5, a_sq_m7_p5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_5); + simde__m128i bit_met_m7_p5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_p3, a_sq_m7_p3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_3); + simde__m128i bit_met_m7_p3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_p1, a_sq_m7_p1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_1); + simde__m128i bit_met_m7_p1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_m1, a_sq_m7_m1); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_1); + simde__m128i bit_met_m7_m1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_m3, a_sq_m7_m3); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_3); + simde__m128i bit_met_m7_m3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_m5, a_sq_m7_m5); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_5); + simde__m128i bit_met_m7_m5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm0 = simde_mm_subs_epi16(psi_a_m7_m7, a_sq_m7_m7); + xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_7); + simde__m128i bit_met_m7_m7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + // Detection for 1st bit + // bit = 1 + xmm0 = simde_mm_max_epi16(bit_met_m7_p7, bit_met_m7_p5); + xmm1 = simde_mm_max_epi16(bit_met_m7_p3, bit_met_m7_p1); + xmm2 = simde_mm_max_epi16(bit_met_m7_m1, bit_met_m7_m3); + xmm3 = simde_mm_max_epi16(bit_met_m7_m5, bit_met_m7_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + simde__m128i logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m5_p5); + xmm1 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m5_p1); + xmm2 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m5_m3); + xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m5_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m3_p7, bit_met_m3_p5); + xmm1 = simde_mm_max_epi16(bit_met_m3_p3, bit_met_m3_p1); + xmm2 = simde_mm_max_epi16(bit_met_m3_m1, bit_met_m3_m3); + xmm3 = simde_mm_max_epi16(bit_met_m3_m5, bit_met_m3_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m1_p5); + xmm1 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m1_p1); + xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m1_m3); + xmm3 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m1_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + // bit = 0 + xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p7_p5); + xmm1 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p7_p1); + xmm2 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p7_m3); + xmm3 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p7_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + simde__m128i logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p5_p7, bit_met_p5_p5); + xmm1 = simde_mm_max_epi16(bit_met_p5_p3, bit_met_p5_p1); + xmm2 = simde_mm_max_epi16(bit_met_p5_m1, bit_met_p5_m3); + xmm3 = simde_mm_max_epi16(bit_met_p5_m5, bit_met_p5_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p3_p5); + xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p3_p1); + xmm2 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p3_m3); + xmm3 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p3_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p1_p7, bit_met_p1_p5); + xmm1 = simde_mm_max_epi16(bit_met_p1_p3, bit_met_p1_p1); + xmm2 = simde_mm_max_epi16(bit_met_p1_m1, bit_met_p1_m3); + xmm3 = simde_mm_max_epi16(bit_met_p1_m5, bit_met_p1_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + y0r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Detection for 2nd bit + // bit = 1 + xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); + xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); + xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); + xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); + xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); + xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); + xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); + xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); + xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); + xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); + xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); + xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); + xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + // bit = 0 + xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); + xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); + xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); + xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); + xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); + xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); + xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); + xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); + xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); + xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); + xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); + xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); + xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + y1r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Detection for 3rd bit + xmm0 = simde_mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5); + xmm1 = simde_mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1); + xmm2 = simde_mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3); + xmm3 = simde_mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5); + xmm1 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1); + xmm2 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3); + xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5); + xmm1 = simde_mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1); + xmm2 = simde_mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3); + xmm3 = simde_mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5); + xmm1 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1); + xmm2 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3); + xmm3 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + xmm0 = simde_mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5); + xmm1 = simde_mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1); + xmm2 = simde_mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3); + xmm3 = simde_mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5); + xmm1 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1); + xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3); + xmm3 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5); + xmm1 = simde_mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1); + xmm2 = simde_mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3); + xmm3 = simde_mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5); + xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1); + xmm2 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3); + xmm3 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + simde__m128i y2r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Detection for 4th bit + xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); + xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); + xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); + xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); + xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); + xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); + xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); + xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); + xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); + xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); + xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); + xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); + xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); + xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); + xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); + xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); + xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); + xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); + xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); + xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); + xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); + xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); + xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); + xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); + xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + y0i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Detection for 5th bit + xmm0 = simde_mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5); + xmm1 = simde_mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1); + xmm2 = simde_mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3); + xmm3 = simde_mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5); + xmm1 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1); + xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3); + xmm3 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5); + xmm1 = simde_mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1); + xmm2 = simde_mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3); + xmm3 = simde_mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5); + xmm1 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1); + xmm2 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3); + xmm3 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + xmm0 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5); + xmm1 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1); + xmm2 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3); + xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5); + xmm1 = simde_mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1); + xmm2 = simde_mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3); + xmm3 = simde_mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5); + xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1); + xmm2 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3); + xmm3 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5); + xmm1 = simde_mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1); + xmm2 = simde_mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3); + xmm3 = simde_mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + y1i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Detection for 6th bit + xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); + xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); + xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); + xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); + xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); + xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); + xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); + xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); + xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); + xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); + xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); + xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); + xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); + logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + + xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); + xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); + xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); + xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); + xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); + xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); + xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); + xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); + xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); + xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); + xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); + xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); + xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5); + xmm4 = simde_mm_max_epi16(xmm0, xmm1); + xmm5 = simde_mm_max_epi16(xmm2, xmm3); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); + logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + + simde__m128i y2i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); + + // Map to output stream, difficult to do in SIMD since we have 6 16bit LLRs + int idx0 = 12 * i; + for (int re = 0; re < 8; re++) { + stream0_out[idx0 + 0].r = ((short *)&y0r)[re]; + stream0_out[idx0 + 0].i = ((short *)&y1r)[re]; + stream0_out[idx0 + 1].r = ((short *)&y2r)[re]; + stream0_out[idx0 + 1].i = ((short *)&y0i)[re]; + stream0_out[idx0 + 2].r = ((short *)&y1i)[re]; + stream0_out[idx0 + 2].i = ((short *)&y2i)[re]; + idx0 += 3; + } + } +#else simde__m256i *rho01_256i = (simde__m256i *)rho01; simde__m256i *stream0_256i_in = (simde__m256i *)stream0_in; simde__m256i *stream1_256i_in = (simde__m256i *)stream1_in; @@ -3612,6 +6905,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, idx0 += 3; } } +#endif simde_mm_empty(); simde_m_empty(); @@ -3640,35 +6934,3 @@ static void nr_ulsch_shift_llr(int16_t **llr_layers, uint32_t nb_re, uint32_t rx llr_layers1[i] = simde_mm_srai_epi16(llr_layers1[i], shift); } } - -void nr_ulsch_compute_ML_llr(NR_gNB_PUSCH *pusch_vars, - uint32_t symbol, - c16_t* rxdataF_comp0, - c16_t* rxdataF_comp1, - c16_t* ul_ch_mag0, - c16_t* ul_ch_mag1, - c16_t* llr_layers0, - c16_t* llr_layers1, - c16_t* rho0, - c16_t* rho1, - uint32_t nb_re, - uint8_t mod_order) -{ - switch (mod_order) { - case 2: - nr_ulsch_qpsk_qpsk(rxdataF_comp0, rxdataF_comp1, llr_layers0, rho0, nb_re); - nr_ulsch_qpsk_qpsk(rxdataF_comp1, rxdataF_comp0, llr_layers1, rho1, nb_re); - nr_ulsch_shift_llr(pusch_vars->llr_layers, nb_re, pusch_vars->llr_offset[symbol] >> 1, 2, 4); - break; - case 4: - nr_ulsch_qam16_qam16(rxdataF_comp0, rxdataF_comp1, ul_ch_mag0, ul_ch_mag1, llr_layers0, rho0, nb_re); - nr_ulsch_qam16_qam16(rxdataF_comp1, rxdataF_comp0, ul_ch_mag1, ul_ch_mag0, llr_layers1, rho1, nb_re); - break; - case 6: - nr_ulsch_qam64_qam64(rxdataF_comp0, rxdataF_comp1, ul_ch_mag0, ul_ch_mag1, llr_layers0, rho0, nb_re); - nr_ulsch_qam64_qam64(rxdataF_comp1, rxdataF_comp0, ul_ch_mag1, ul_ch_mag0, llr_layers1, rho1, nb_re); - break; - default: - AssertFatal(1 == 0, "nr_ulsch_compute_llr: invalid Qm value, Qm = %d\n", mod_order); - } -} From 7e9968451f59ad4fd03777f542070390c0bef927 Mon Sep 17 00:00:00 2001 From: Quency Date: Wed, 12 Jul 2023 16:18:19 +0200 Subject: [PATCH 02/18] feat / Turn #define into static inline functions --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 1604 +++++++---------- 1 file changed, 684 insertions(+), 920 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index d8fe9c1048..d1735b5377 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -576,156 +576,176 @@ void nr_ulsch_qpsk_qpsk(c16_t *stream0_in, c16_t *stream1_in, c16_t *stream0_out static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; -static const int16_t ones256[16] __attribute__((aligned(32))) = {0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff, - 0xffff}; +static const int16_t ones256[16] __attribute__((aligned(32))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; // calculate interference magnitude // tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 46 -#define interference_abs_64qam_epi16(psi, int_ch_mag, int_two_ch_mag, int_three_ch_mag, a, c1, c3, c5, c7) \ - tmp_result = simde_mm_cmpgt_epi16(int_two_ch_mag, psi); \ - tmp_result3 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); \ - tmp_result2 = simde_mm_cmpgt_epi16(int_ch_mag, psi); \ - tmp_result = simde_mm_xor_si128(tmp_result, tmp_result2); \ - tmp_result4 = simde_mm_cmpgt_epi16(psi, int_three_ch_mag); \ - tmp_result3 = simde_mm_xor_si128(tmp_result3, tmp_result4); \ - tmp_result = simde_mm_and_si128(tmp_result, c3); \ - tmp_result2 = simde_mm_and_si128(tmp_result2, c1); \ - tmp_result3 = simde_mm_and_si128(tmp_result3, c5); \ - tmp_result4 = simde_mm_and_si128(tmp_result4, c7); \ - tmp_result = simde_mm_or_si128(tmp_result, tmp_result2); \ - tmp_result3 = simde_mm_or_si128(tmp_result3, tmp_result4); \ - const simde__m128i a = simde_mm_or_si128(tmp_result, tmp_result3); +static inline simde__m128i interference_abs_64qam_epi16(simde__m128i psi, + simde__m128i int_ch_mag, + simde__m128i int_two_ch_mag, + simde__m128i int_three_ch_mag, + simde__m128i c1, + simde__m128i c3, + simde__m128i c5, + simde__m128i c7) +{ + simde__m128i tmp_result = simde_mm_cmpgt_epi16(int_two_ch_mag, psi); + simde__m128i tmp_result3 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); + simde__m128i tmp_result2 = simde_mm_cmpgt_epi16(int_ch_mag, psi); + tmp_result = simde_mm_xor_si128(tmp_result, tmp_result2); + simde__m128i tmp_result4 = simde_mm_cmpgt_epi16(psi, int_three_ch_mag); + tmp_result3 = simde_mm_xor_si128(tmp_result3, tmp_result4); + tmp_result = simde_mm_and_si128(tmp_result, c3); + tmp_result2 = simde_mm_and_si128(tmp_result2, c1); + tmp_result3 = simde_mm_and_si128(tmp_result3, c5); + tmp_result4 = simde_mm_and_si128(tmp_result4, c7); + tmp_result = simde_mm_or_si128(tmp_result, tmp_result2); + tmp_result3 = simde_mm_or_si128(tmp_result3, tmp_result4); + return simde_mm_or_si128(tmp_result, tmp_result3); +} // calculate interference magnitude // tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 46 -#define interference_abs_64qam_epi16_256(psi, int_ch_mag, int_two_ch_mag, int_three_ch_mag, a, c1, c3, c5, c7) \ - tmp_result = simde_mm256_cmpgt_epi16(int_two_ch_mag, psi); \ - tmp_result3 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); \ - tmp_result2 = simde_mm256_cmpgt_epi16(int_ch_mag, psi); \ - tmp_result = simde_mm256_xor_si256(tmp_result, tmp_result2); \ - tmp_result4 = simde_mm256_cmpgt_epi16(psi, int_three_ch_mag); \ - tmp_result3 = simde_mm256_xor_si256(tmp_result3, tmp_result4); \ - tmp_result = simde_mm256_and_si256(tmp_result, c3); \ - tmp_result2 = simde_mm256_and_si256(tmp_result2, c1); \ - tmp_result3 = simde_mm256_and_si256(tmp_result3, c5); \ - tmp_result4 = simde_mm256_and_si256(tmp_result4, c7); \ - tmp_result = simde_mm256_or_si256(tmp_result, tmp_result2); \ - tmp_result3 = simde_mm256_or_si256(tmp_result3, tmp_result4); \ - const simde__m256i a = simde_mm256_or_si256(tmp_result, tmp_result3); +static inline simde__m256i interference_abs_64qam_epi16_256(simde__m256i psi, + simde__m256i int_ch_mag, + simde__m256i int_two_ch_mag, + simde__m256i int_three_ch_mag, + simde__m256i c1, + simde__m256i c3, + simde__m256i c5, + simde__m256i c7) +{ + simde__m256i tmp_result = simde_mm256_cmpgt_epi16(int_two_ch_mag, psi); + simde__m256i tmp_result3 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); + simde__m256i tmp_result2 = simde_mm256_cmpgt_epi16(int_ch_mag, psi); + tmp_result = simde_mm256_xor_si256(tmp_result, tmp_result2); + simde__m256i tmp_result4 = simde_mm256_cmpgt_epi16(psi, int_three_ch_mag); + tmp_result3 = simde_mm256_xor_si256(tmp_result3, tmp_result4); + tmp_result = simde_mm256_and_si256(tmp_result, c3); + tmp_result2 = simde_mm256_and_si256(tmp_result2, c1); + tmp_result3 = simde_mm256_and_si256(tmp_result3, c5); + tmp_result4 = simde_mm256_and_si256(tmp_result4, c7); + tmp_result = simde_mm256_or_si256(tmp_result, tmp_result2); + tmp_result3 = simde_mm256_or_si256(tmp_result3, tmp_result4); + return simde_mm256_or_si256(tmp_result, tmp_result3); +} // Calculates psi_a = psi_r * a_r + psi_i * a_i -#define prodsum_psi_a_epi16(psi_r, a_r, psi_i, a_i, psi_a) \ - tmp_result = simde_mm_mulhi_epi16(psi_r, a_r); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(psi_i, a_i); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - simde__m128i psi_a = simde_mm_adds_epi16(tmp_result, tmp_result2); +static inline simde__m128i prodsum_psi_a_epi16(simde__m128i psi_r, simde__m128i a_r, simde__m128i psi_i, simde__m128i a_i) +{ + simde__m128i tmp_result = simde_mm_mulhi_epi16(psi_r, a_r); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + simde__m128i tmp_result2 = simde_mm_mulhi_epi16(psi_i, a_i); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); + return simde_mm_adds_epi16(tmp_result, tmp_result2); +} // calculates psi_a = psi_r*a_r + psi_i*a_i -#define prodsum_psi_a_epi16_256(psi_r, a_r, psi_i, a_i, psi_a) \ - tmp_result = simde_mm256_mulhi_epi16(psi_r, a_r); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(psi_i, a_i); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - simde__m256i psi_a = simde_mm256_adds_epi16(tmp_result, tmp_result2); +static inline simde__m256i prodsum_psi_a_epi16_256(simde__m256i psi_r, simde__m256i a_r, simde__m256i psi_i, simde__m256i a_i) +{ + simde__m256i tmp_result = simde_mm256_mulhi_epi16(psi_r, a_r); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + simde__m256i tmp_result2 = simde_mm256_mulhi_epi16(psi_i, a_i); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); + return simde_mm256_adds_epi16(tmp_result, tmp_result2); +} // Calculate interference magnitude -#define interference_abs_epi16(psi, int_ch_mag, int_mag, c1, c2) \ - tmp_result = simde_mm_cmplt_epi16(psi, int_ch_mag); \ - tmp_result2 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); \ - tmp_result = simde_mm_and_si128(tmp_result, c1); \ - tmp_result2 = simde_mm_and_si128(tmp_result2, c2); \ +static inline void interference_abs_epi16(simde__m128i psi, simde__m128i int_ch_mag, simde__m128i int_mag, simde__m128i c1, simde__m128i c2) +{ + simde__m128i tmp_result = simde_mm_cmplt_epi16(psi, int_ch_mag); + simde__m128i tmp_result2 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); + tmp_result = simde_mm_and_si128(tmp_result, c1); + tmp_result2 = simde_mm_and_si128(tmp_result2, c2); int_mag = simde_mm_or_si128(tmp_result, tmp_result2); +} // Calculate interference magnitude -#define interference_abs_epi16_256(psi, int_ch_mag, int_mag, c1, c2) \ - tmp_result = simde_mm256_cmpgt_epi16(int_ch_mag, psi); \ - tmp_result2 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); \ - tmp_result = simde_mm256_and_si256(tmp_result, c1); \ - tmp_result2 = simde_mm256_and_si256(tmp_result2, c2); \ +static inline void interference_abs_epi16_256(simde__m256i psi, simde__m256i int_ch_mag, simde__m256i int_mag, simde__m256i c1, simde__m256i c2) +{ + simde__m256i tmp_result = simde_mm256_cmpgt_epi16(int_ch_mag, psi); + simde__m256i tmp_result2 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); + tmp_result = simde_mm256_and_si256(tmp_result, c1); + tmp_result2 = simde_mm256_and_si256(tmp_result2, c2); int_mag = simde_mm256_or_si256(tmp_result, tmp_result2); +} // Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor -#define square_a_epi16(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ - tmp_result = simde_mm_mulhi_epi16(a_r, a_r); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm_mulhi_epi16(tmp_result, scale_factor); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm_mulhi_epi16(tmp_result, int_ch_mag); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(a_i, a_i); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, scale_factor); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ +static inline void square_a_epi16(simde__m128i a_r, simde__m128i a_i, simde__m128i int_ch_mag, simde__m128i scale_factor, simde__m128i a_sq) +{ + simde__m128i tmp_result = simde_mm_mulhi_epi16(a_r, a_r); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + tmp_result = simde_mm_mulhi_epi16(tmp_result, scale_factor); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + tmp_result = simde_mm_mulhi_epi16(tmp_result, int_ch_mag); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + simde__m128i tmp_result2 = simde_mm_mulhi_epi16(a_i, a_i); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, scale_factor); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); a_sq = simde_mm_adds_epi16(tmp_result, tmp_result2); +} // Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor -#define square_a_epi16_256(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ - tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ +static inline void square_a_epi16_256(simde__m256i a_r, simde__m256i a_i, simde__m256i int_ch_mag, simde__m256i scale_factor, simde__m256i a_sq) +{ + simde__m256i tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + simde__m256i tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); +} // calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM -#define square_a_64qam_epi16(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ - tmp_result = simde_mm_mulhi_epi16(a_r, a_r); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm_mulhi_epi16(tmp_result, scale_factor); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 3); \ - tmp_result = simde_mm_mulhi_epi16(tmp_result, int_ch_mag); \ - tmp_result = simde_mm_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(a_i, a_i); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, scale_factor); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 3); \ - tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); \ - tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); \ - const simde__m128i a_sq = simde_mm_adds_epi16(tmp_result, tmp_result2); +static inline simde__m128i square_a_64qam_epi16(simde__m128i a_r, simde__m128i a_i, simde__m128i int_ch_mag, simde__m128i scale_factor) +{ + simde__m128i tmp_result = simde_mm_mulhi_epi16(a_r, a_r); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + tmp_result = simde_mm_mulhi_epi16(tmp_result, scale_factor); + tmp_result = simde_mm_slli_epi16(tmp_result, 3); + tmp_result = simde_mm_mulhi_epi16(tmp_result, int_ch_mag); + tmp_result = simde_mm_slli_epi16(tmp_result, 1); + simde__m128i tmp_result2 = simde_mm_mulhi_epi16(a_i, a_i); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, scale_factor); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 3); + tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); + tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); + return simde_mm_adds_epi16(tmp_result, tmp_result2); +} // calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM -#define square_a_64qam_epi16_256(a_r, a_i, int_ch_mag, scale_factor, a_sq) \ - tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 3); \ - tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); \ - tmp_result = simde_mm256_slli_epi16(tmp_result, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 3); \ - tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); \ - tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); \ - const simde__m256i a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); +static inline simde__m256i square_a_64qam_epi16_256(simde__m256i a_r, simde__m256i a_i, simde__m256i int_ch_mag, simde__m256i scale_factor) +{ + simde__m256i tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + tmp_result = simde_mm256_mulhi_epi16(tmp_result, scale_factor); + tmp_result = simde_mm256_slli_epi16(tmp_result, 3); + tmp_result = simde_mm256_mulhi_epi16(tmp_result, int_ch_mag); + tmp_result = simde_mm256_slli_epi16(tmp_result, 1); + simde__m256i tmp_result2 = simde_mm256_mulhi_epi16(a_i, a_i); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, scale_factor); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 3); + tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); + tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); + return simde_mm256_adds_epi16(tmp_result, tmp_result2); +} simde__m128i max_epi16(simde__m128i m0, simde__m128i m1, simde__m128i m2, simde__m128i m3, simde__m128i m4, simde__m128i m5, simde__m128i m6, simde__m128i m7) { @@ -1100,22 +1120,22 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude - prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); + simde__m128i psi_a_p1_p1 = prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + simde__m128i psi_a_p1_p3 = prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + simde__m128i psi_a_p3_p1 = prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + simde__m128i psi_a_p3_p3 = prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + simde__m128i psi_a_p1_m1 = prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + simde__m128i psi_a_p1_m3 = prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + simde__m128i psi_a_p3_m1 = prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + simde__m128i psi_a_p3_m3 = prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + simde__m128i psi_a_m1_p1 = prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + simde__m128i psi_a_m1_p3 = prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + simde__m128i psi_a_m3_p1 = prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + simde__m128i psi_a_m3_p3 = prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + simde__m128i psi_a_m1_m1 = prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + simde__m128i psi_a_m1_m3 = prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + simde__m128i psi_a_m3_m1 = prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + simde__m128i psi_a_m3_m3 = prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); // squared interference magnitude times int. ch. power square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); @@ -1635,22 +1655,22 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, interference_abs_epi16_256(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude - prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); + simde__m256i psi_a_p1_p1 = prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + simde__m256i psi_a_p1_p3 = prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + simde__m256i psi_a_p3_p1 = prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + simde__m256i psi_a_p3_p3 = prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + simde__m256i psi_a_p1_m1 = prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + simde__m256i psi_a_p1_m3 = prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + simde__m256i psi_a_p3_m1 = prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + simde__m256i psi_a_p3_m3 = prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + simde__m256i psi_a_m1_p1 = prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + simde__m256i psi_a_m1_p3 = prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + simde__m256i psi_a_m3_p1 = prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + simde__m256i psi_a_m3_p3 = prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + simde__m256i psi_a_m1_m1 = prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + simde__m256i psi_a_m1_m3 = prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + simde__m256i psi_a_m3_m1 = prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + simde__m256i psi_a_m3_m3 = prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); // squared interference magnitude times int. ch. power square_a_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); @@ -2333,1225 +2353,1097 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 simde__m128i tmp_result, tmp_result2, tmp_result3, tmp_result4; - interference_abs_64qam_epi16(psi_r_p7_p7, + simde__m128i a_r_p7_p7 = interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p5, + simde__m128i a_r_p7_p5 = interference_abs_64qam_epi16(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p3, + simde__m128i a_r_p7_p3 = interference_abs_64qam_epi16(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p1, + simde__m128i a_r_p7_p1 = interference_abs_64qam_epi16(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m1, + simde__m128i a_r_p7_m1 = interference_abs_64qam_epi16(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m3, + simde__m128i a_r_p7_m3 = interference_abs_64qam_epi16(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m5, + simde__m128i a_r_p7_m5 = interference_abs_64qam_epi16(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m7, + simde__m128i a_r_p7_m7 = interference_abs_64qam_epi16(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p7, + simde__m128i a_r_p5_p7 = interference_abs_64qam_epi16(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p5, + simde__m128i a_r_p5_p5 = interference_abs_64qam_epi16(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p3, + simde__m128i a_r_p5_p3 = interference_abs_64qam_epi16(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p1, + simde__m128i a_r_p5_p1 = interference_abs_64qam_epi16(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m1, + simde__m128i a_r_p5_m1 = interference_abs_64qam_epi16(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m3, + simde__m128i a_r_p5_m3 = interference_abs_64qam_epi16(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m5, + simde__m128i a_r_p5_m5 = interference_abs_64qam_epi16(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m7, + simde__m128i a_r_p5_m7 = interference_abs_64qam_epi16(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p7, + simde__m128i a_r_p3_p7 = interference_abs_64qam_epi16(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p5, + simde__m128i a_r_p3_p5 = interference_abs_64qam_epi16(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p3, + simde__m128i a_r_p3_p3 = interference_abs_64qam_epi16(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p1, + simde__m128i a_r_p3_p1 = interference_abs_64qam_epi16(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m1, + simde__m128i a_r_p3_m1 = interference_abs_64qam_epi16(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m3, + simde__m128i a_r_p3_m3 = interference_abs_64qam_epi16(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m5, + simde__m128i a_r_p3_m5 = interference_abs_64qam_epi16(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m7, + simde__m128i a_r_p3_m7 = interference_abs_64qam_epi16(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p7, + simde__m128i a_r_p1_p7 = interference_abs_64qam_epi16(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p5, + simde__m128i a_r_p1_p5 = interference_abs_64qam_epi16(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p3, + simde__m128i a_r_p1_p3 = interference_abs_64qam_epi16(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p1, + simde__m128i a_r_p1_p1 = interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m1, + simde__m128i a_r_p1_m1 = interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m3, + simde__m128i a_r_p1_m3 = interference_abs_64qam_epi16(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m5, + simde__m128i a_r_p1_m5 = interference_abs_64qam_epi16(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m7, + simde__m128i a_r_p1_m7 = interference_abs_64qam_epi16(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p7, + simde__m128i a_r_m1_p7 = interference_abs_64qam_epi16(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p5, + simde__m128i a_r_m1_p5 = interference_abs_64qam_epi16(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p3, + simde__m128i a_r_m1_p3 = interference_abs_64qam_epi16(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p1, + simde__m128i a_r_m1_p1 = interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m1, + simde__m128i a_r_m1_m1 = interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m3, + simde__m128i a_r_m1_m3 = interference_abs_64qam_epi16(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m5, + simde__m128i a_r_m1_m5 = interference_abs_64qam_epi16(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m7, + simde__m128i a_r_m1_m7 = interference_abs_64qam_epi16(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p7, + simde__m128i a_r_m3_p7 = interference_abs_64qam_epi16(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p5, + simde__m128i a_r_m3_p5 = interference_abs_64qam_epi16(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p3, + simde__m128i a_r_m3_p3 = interference_abs_64qam_epi16(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p1, + simde__m128i a_r_m3_p1 = interference_abs_64qam_epi16(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m1, + simde__m128i a_r_m3_m1 = interference_abs_64qam_epi16(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m3, + simde__m128i a_r_m3_m3 = interference_abs_64qam_epi16(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m5, + simde__m128i a_r_m3_m5 = interference_abs_64qam_epi16(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m7, + simde__m128i a_r_m3_m7 = interference_abs_64qam_epi16(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p7, + simde__m128i a_r_m5_p7 = interference_abs_64qam_epi16(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p5, + simde__m128i a_r_m5_p5 = interference_abs_64qam_epi16(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p3, + simde__m128i a_r_m5_p3 = interference_abs_64qam_epi16(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p1, + simde__m128i a_r_m5_p1 = interference_abs_64qam_epi16(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m1, + simde__m128i a_r_m5_m1 = interference_abs_64qam_epi16(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m3, + simde__m128i a_r_m5_m3 = interference_abs_64qam_epi16(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m5, + simde__m128i a_r_m5_m5 = interference_abs_64qam_epi16(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m7, + simde__m128i a_r_m5_m7 = interference_abs_64qam_epi16(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p7, + simde__m128i a_r_m7_p7 = interference_abs_64qam_epi16(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p5, + simde__m128i a_r_m7_p5 = interference_abs_64qam_epi16(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p3, + simde__m128i a_r_m7_p3 = interference_abs_64qam_epi16(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p1, + simde__m128i a_r_m7_p1 = interference_abs_64qam_epi16(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m1, + simde__m128i a_r_m7_m1 = interference_abs_64qam_epi16(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m3, + simde__m128i a_r_m7_m3 = interference_abs_64qam_epi16(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m5, + simde__m128i a_r_m7_m5 = interference_abs_64qam_epi16(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m7, + simde__m128i a_r_m7_m7 = interference_abs_64qam_epi16(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p7, + simde__m128i a_i_p7_p7 = interference_abs_64qam_epi16(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p5, + simde__m128i a_i_p7_p5 = interference_abs_64qam_epi16(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p3, + simde__m128i a_i_p7_p3 = interference_abs_64qam_epi16(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p1, + simde__m128i a_i_p7_p1 = interference_abs_64qam_epi16(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m1, + simde__m128i a_i_p7_m1 = interference_abs_64qam_epi16(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m3, + simde__m128i a_i_p7_m3 = interference_abs_64qam_epi16(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m5, + simde__m128i a_i_p7_m5 = interference_abs_64qam_epi16(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m7, + simde__m128i a_i_p7_m7 = interference_abs_64qam_epi16(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p7, + simde__m128i a_i_p5_p7 = interference_abs_64qam_epi16(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p5, + simde__m128i a_i_p5_p5 = interference_abs_64qam_epi16(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p3, + simde__m128i a_i_p5_p3 = interference_abs_64qam_epi16(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p1, + simde__m128i a_i_p5_p1 = interference_abs_64qam_epi16(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m1, + simde__m128i a_i_p5_m1 = interference_abs_64qam_epi16(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m3, + simde__m128i a_i_p5_m3 = interference_abs_64qam_epi16(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m5, + simde__m128i a_i_p5_m5 = interference_abs_64qam_epi16(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m7, + simde__m128i a_i_p5_m7 = interference_abs_64qam_epi16(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p7, + simde__m128i a_i_p3_p7 = interference_abs_64qam_epi16(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p5, + simde__m128i a_i_p3_p5 = interference_abs_64qam_epi16(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p3, + simde__m128i a_i_p3_p3 = interference_abs_64qam_epi16(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p1, + simde__m128i a_i_p3_p1 = interference_abs_64qam_epi16(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m1, + simde__m128i a_i_p3_m1 = interference_abs_64qam_epi16(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m3, + simde__m128i a_i_p3_m3 = interference_abs_64qam_epi16(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m5, + simde__m128i a_i_p3_m5 = interference_abs_64qam_epi16(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m7, + simde__m128i a_i_p3_m7 = interference_abs_64qam_epi16(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p7, + simde__m128i a_i_p1_p7 = interference_abs_64qam_epi16(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p5, + simde__m128i a_i_p1_p5 = interference_abs_64qam_epi16(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p3, + simde__m128i a_i_p1_p3 = interference_abs_64qam_epi16(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p1, + simde__m128i a_i_p1_p1 = interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m1, + simde__m128i a_i_p1_m1 = interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m3, + simde__m128i a_i_p1_m3 = interference_abs_64qam_epi16(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m5, + simde__m128i a_i_p1_m5 = interference_abs_64qam_epi16(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m7, + simde__m128i a_i_p1_m7 = interference_abs_64qam_epi16(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p7, + simde__m128i a_i_m1_p7 = interference_abs_64qam_epi16(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p5, + simde__m128i a_i_m1_p5 = interference_abs_64qam_epi16(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p3, + simde__m128i a_i_m1_p3 = interference_abs_64qam_epi16(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p1, + simde__m128i a_i_m1_p1 = interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m1, + simde__m128i a_i_m1_m1 = interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m3, + simde__m128i a_i_m1_m3 = interference_abs_64qam_epi16(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m5, + simde__m128i a_i_m1_m5 = interference_abs_64qam_epi16(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m7, + simde__m128i a_i_m1_m7 = interference_abs_64qam_epi16(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p7, + simde__m128i a_i_m3_p7 = interference_abs_64qam_epi16(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p5, + simde__m128i a_i_m3_p5 = interference_abs_64qam_epi16(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p3, + simde__m128i a_i_m3_p3 = interference_abs_64qam_epi16(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p1, + simde__m128i a_i_m3_p1 = interference_abs_64qam_epi16(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m1, + simde__m128i a_i_m3_m1 = interference_abs_64qam_epi16(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m3, + simde__m128i a_i_m3_m3 = interference_abs_64qam_epi16(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m5, + simde__m128i a_i_m3_m5 = interference_abs_64qam_epi16(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m7, + simde__m128i a_i_m3_m7 = interference_abs_64qam_epi16(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p7, + simde__m128i a_i_m5_p7 = interference_abs_64qam_epi16(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p5, + simde__m128i a_i_m5_p5 = interference_abs_64qam_epi16(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p3, + simde__m128i a_i_m5_p3 = interference_abs_64qam_epi16(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p1, + simde__m128i a_i_m5_p1 = interference_abs_64qam_epi16(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m1, + simde__m128i a_i_m5_m1 = interference_abs_64qam_epi16(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m3, + simde__m128i a_i_m5_m3 = interference_abs_64qam_epi16(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m5, + simde__m128i a_i_m5_m5 = interference_abs_64qam_epi16(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m7, + simde__m128i a_i_m5_m7 = interference_abs_64qam_epi16(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p7, + simde__m128i a_i_m7_p7 = interference_abs_64qam_epi16(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p5, + simde__m128i a_i_m7_p5 = interference_abs_64qam_epi16(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p3, + simde__m128i a_i_m7_p3 = interference_abs_64qam_epi16(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p1, + simde__m128i a_i_m7_p1 = interference_abs_64qam_epi16(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m1, + simde__m128i a_i_m7_m1 = interference_abs_64qam_epi16(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m3, + simde__m128i a_i_m7_m3 = interference_abs_64qam_epi16(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m5, + simde__m128i a_i_m7_m5 = interference_abs_64qam_epi16(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m7, + simde__m128i a_i_m7_m7 = interference_abs_64qam_epi16(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); // Calculation of a group of two terms in the bit metric involving product of psi and interference - prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7); - prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5); - prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3); - prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1); - prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1); - prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3); - prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5); - prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7); - prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7); - prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5); - prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3); - prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1); - prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1); - prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3); - prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5); - prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7); - prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7); - prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5); - prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5); - prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7); - prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7); - prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5); - prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5); - prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7); - prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7); - prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5); - prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5); - prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7); - prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7); - prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5); - prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); - prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5); - prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7); - prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7); - prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5); - prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3); - prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1); - prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1); - prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3); - prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5); - prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7); - prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7); - prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5); - prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3); - prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1); - prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1); - prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3); - prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5); - prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7); + simde__m128i psi_a_p7_p7 = prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7); + simde__m128i psi_a_p7_p5 = prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5); + simde__m128i psi_a_p7_p3 = prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3); + simde__m128i psi_a_p7_p1 = prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1); + simde__m128i psi_a_p7_m1 = prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1); + simde__m128i psi_a_p7_m3 = prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3); + simde__m128i psi_a_p7_m5 = prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5); + simde__m128i psi_a_p7_m7 = prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7); + simde__m128i psi_a_p5_p7 = prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7); + simde__m128i psi_a_p5_p5 = prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5); + simde__m128i psi_a_p5_p3 = prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3); + simde__m128i psi_a_p5_p1 = prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1); + simde__m128i psi_a_p5_m1 = prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1); + simde__m128i psi_a_p5_m3 = prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3); + simde__m128i psi_a_p5_m5 = prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5); + simde__m128i psi_a_p5_m7 = prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7); + simde__m128i psi_a_p3_p7 = prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7); + simde__m128i psi_a_p3_p5 = prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5); + simde__m128i psi_a_p3_p3 = prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + simde__m128i psi_a_p3_p1 = prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + simde__m128i psi_a_p3_m1 = prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + simde__m128i psi_a_p3_m3 = prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + simde__m128i psi_a_p3_m5 = prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5); + simde__m128i psi_a_p3_m7 = prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7); + simde__m128i psi_a_p1_p7 = prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7); + simde__m128i psi_a_p1_p5 = prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5); + simde__m128i psi_a_p1_p3 = prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + simde__m128i psi_a_p1_p1 = prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + simde__m128i psi_a_p1_m1 = prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + simde__m128i psi_a_p1_m3 = prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + simde__m128i psi_a_p1_m5 = prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5); + simde__m128i psi_a_p1_m7 = prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7); + simde__m128i psi_a_m1_p7 = prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7); + simde__m128i psi_a_m1_p5 = prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5); + simde__m128i psi_a_m1_p3 = prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + simde__m128i psi_a_m1_p1 = prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + simde__m128i psi_a_m1_m1 = prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + simde__m128i psi_a_m1_m3 = prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + simde__m128i psi_a_m1_m5 = prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5); + simde__m128i psi_a_m1_m7 = prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7); + simde__m128i psi_a_m3_p7 = prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7); + simde__m128i psi_a_m3_p5 = prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5); + simde__m128i psi_a_m3_p3 = prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + simde__m128i psi_a_m3_p1 = prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + simde__m128i psi_a_m3_m1 = prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + simde__m128i psi_a_m3_m3 = prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); + simde__m128i psi_a_m3_m5 = prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5); + simde__m128i psi_a_m3_m7 = prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7); + simde__m128i psi_a_m5_p7 = prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7); + simde__m128i psi_a_m5_p5 = prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5); + simde__m128i psi_a_m5_p3 = prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3); + simde__m128i psi_a_m5_p1 = prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1); + simde__m128i psi_a_m5_m1 = prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1); + simde__m128i psi_a_m5_m3 = prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3); + simde__m128i psi_a_m5_m5 = prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5); + simde__m128i psi_a_m5_m7 = prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7); + simde__m128i psi_a_m7_p7 = prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7); + simde__m128i psi_a_m7_p5 = prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5); + simde__m128i psi_a_m7_p3 = prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3); + simde__m128i psi_a_m7_p1 = prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1); + simde__m128i psi_a_m7_m1 = prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1); + simde__m128i psi_a_m7_m3 = prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3); + simde__m128i psi_a_m7_m5 = prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5); + simde__m128i psi_a_m7_m7 = prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7); // Multiply by sqrt(2) psi_a_p7_p7 = simde_mm_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); @@ -3684,70 +3576,70 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, psi_a_m7_m7 = simde_mm_slli_epi16(psi_a_m7_m7, 2); // Calculation of a group of two terms in the bit metric involving squares of interference - square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7); - square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5); - square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3); - square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1); - square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1); - square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3); - square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5); - square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7); - square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7); - square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5); - square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3); - square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1); - square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1); - square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3); - square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5); - square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7); - square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7); - square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5); - square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3); - square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1); - square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1); - square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3); - square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5); - square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7); - square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7); - square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5); - square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3); - square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1); - square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1); - square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3); - square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5); - square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7); - square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7); - square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5); - square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3); - square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1); - square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1); - square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3); - square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5); - square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7); - square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7); - square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5); - square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3); - square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1); - square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1); - square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3); - square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5); - square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7); - square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7); - square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5); - square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3); - square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1); - square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1); - square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3); - square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5); - square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7); - square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7); - square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5); - square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3); - square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1); - square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1); - square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3); - square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5); - square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7); + simde__m128i a_sq_p7_p7 = square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_p5 = square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_p3 = square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_p1 = square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_m1 = square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_m3 = square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_m5 = square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p7_m7 = square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_p7 = square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_p5 = square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_p3 = square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_p1 = square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_m1 = square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_m3 = square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_m5 = square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p5_m7 = square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_p7 = square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_p5 = square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_p3 = square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_p1 = square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_m1 = square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_m3 = square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_m5 = square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p3_m7 = square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_p7 = square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_p5 = square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_p3 = square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_p1 = square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_m1 = square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_m3 = square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_m5 = square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_p1_m7 = square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_p7 = square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_p5 = square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_p3 = square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_p1 = square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_m1 = square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_m3 = square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_m5 = square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m1_m7 = square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_p7 = square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_p5 = square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_p3 = square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_p1 = square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_m1 = square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_m3 = square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_m5 = square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m3_m7 = square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_p7 = square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_p5 = square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_p3 = square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_p1 = square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_m1 = square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_m3 = square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_m5 = square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m5_m7 = square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_p7 = square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_p5 = square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_p3 = square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_p1 = square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_m1 = square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_m3 = square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_m5 = square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m128i a_sq_m7_m7 = square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR); // Computing different multiples of ||h0||^2 // x=1, y=1 @@ -4844,1225 +4736,1097 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 simde__m256i tmp_result, tmp_result2, tmp_result3, tmp_result4; - interference_abs_64qam_epi16_256(psi_r_p7_p7, + simde__m256i a_r_p7_p7 = interference_abs_64qam_epi16_256(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_p5, + simde__m256i a_r_p7_p5 = interference_abs_64qam_epi16_256(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_p3, + simde__m256i a_r_p7_p3 = interference_abs_64qam_epi16_256(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_p1, + simde__m256i a_r_p7_p1 = interference_abs_64qam_epi16_256(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_m1, + simde__m256i a_r_p7_m1 = interference_abs_64qam_epi16_256(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_m3, + simde__m256i a_r_p7_m3 = interference_abs_64qam_epi16_256(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_m5, + simde__m256i a_r_p7_m5 = interference_abs_64qam_epi16_256(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p7_m7, + simde__m256i a_r_p7_m7 = interference_abs_64qam_epi16_256(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_p7, + simde__m256i a_r_p5_p7 = interference_abs_64qam_epi16_256(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_p5, + simde__m256i a_r_p5_p5 = interference_abs_64qam_epi16_256(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_p3, + simde__m256i a_r_p5_p3 = interference_abs_64qam_epi16_256(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_p1, + simde__m256i a_r_p5_p1 = interference_abs_64qam_epi16_256(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_m1, + simde__m256i a_r_p5_m1 = interference_abs_64qam_epi16_256(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_m3, + simde__m256i a_r_p5_m3 = interference_abs_64qam_epi16_256(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_m5, + simde__m256i a_r_p5_m5 = interference_abs_64qam_epi16_256(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p5_m7, + simde__m256i a_r_p5_m7 = interference_abs_64qam_epi16_256(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_p7, + simde__m256i a_r_p3_p7 = interference_abs_64qam_epi16_256(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_p5, + simde__m256i a_r_p3_p5 = interference_abs_64qam_epi16_256(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_p3, + simde__m256i a_r_p3_p3 = interference_abs_64qam_epi16_256(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_p1, + simde__m256i a_r_p3_p1 = interference_abs_64qam_epi16_256(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_m1, + simde__m256i a_r_p3_m1 = interference_abs_64qam_epi16_256(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_m3, + simde__m256i a_r_p3_m3 = interference_abs_64qam_epi16_256(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_m5, + simde__m256i a_r_p3_m5 = interference_abs_64qam_epi16_256(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p3_m7, + simde__m256i a_r_p3_m7 = interference_abs_64qam_epi16_256(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_p7, + simde__m256i a_r_p1_p7 = interference_abs_64qam_epi16_256(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_p5, + simde__m256i a_r_p1_p5 = interference_abs_64qam_epi16_256(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_p3, + simde__m256i a_r_p1_p3 = interference_abs_64qam_epi16_256(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_p1, + simde__m256i a_r_p1_p1 = interference_abs_64qam_epi16_256(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_m1, + simde__m256i a_r_p1_m1 = interference_abs_64qam_epi16_256(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_m3, + simde__m256i a_r_p1_m3 = interference_abs_64qam_epi16_256(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_m5, + simde__m256i a_r_p1_m5 = interference_abs_64qam_epi16_256(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_p1_m7, + simde__m256i a_r_p1_m7 = interference_abs_64qam_epi16_256(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_p7, + simde__m256i a_r_m1_p7 = interference_abs_64qam_epi16_256(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_p5, + simde__m256i a_r_m1_p5 = interference_abs_64qam_epi16_256(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_p3, + simde__m256i a_r_m1_p3 = interference_abs_64qam_epi16_256(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_p1, + simde__m256i a_r_m1_p1 = interference_abs_64qam_epi16_256(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_m1, + simde__m256i a_r_m1_m1 = interference_abs_64qam_epi16_256(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_m3, + simde__m256i a_r_m1_m3 = interference_abs_64qam_epi16_256(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_m5, + simde__m256i a_r_m1_m5 = interference_abs_64qam_epi16_256(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m1_m7, + simde__m256i a_r_m1_m7 = interference_abs_64qam_epi16_256(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_p7, + simde__m256i a_r_m3_p7 = interference_abs_64qam_epi16_256(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_p5, + simde__m256i a_r_m3_p5 = interference_abs_64qam_epi16_256(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_p3, + simde__m256i a_r_m3_p3 = interference_abs_64qam_epi16_256(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_p1, + simde__m256i a_r_m3_p1 = interference_abs_64qam_epi16_256(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_m1, + simde__m256i a_r_m3_m1 = interference_abs_64qam_epi16_256(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_m3, + simde__m256i a_r_m3_m3 = interference_abs_64qam_epi16_256(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_m5, + simde__m256i a_r_m3_m5 = interference_abs_64qam_epi16_256(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m3_m7, + simde__m256i a_r_m3_m7 = interference_abs_64qam_epi16_256(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_p7, + simde__m256i a_r_m5_p7 = interference_abs_64qam_epi16_256(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_p5, + simde__m256i a_r_m5_p5 = interference_abs_64qam_epi16_256(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_p3, + simde__m256i a_r_m5_p3 = interference_abs_64qam_epi16_256(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_p1, + simde__m256i a_r_m5_p1 = interference_abs_64qam_epi16_256(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_m1, + simde__m256i a_r_m5_m1 = interference_abs_64qam_epi16_256(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_m3, + simde__m256i a_r_m5_m3 = interference_abs_64qam_epi16_256(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_m5, + simde__m256i a_r_m5_m5 = interference_abs_64qam_epi16_256(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m5_m7, + simde__m256i a_r_m5_m7 = interference_abs_64qam_epi16_256(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_p7, + simde__m256i a_r_m7_p7 = interference_abs_64qam_epi16_256(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_p5, + simde__m256i a_r_m7_p5 = interference_abs_64qam_epi16_256(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_p3, + simde__m256i a_r_m7_p3 = interference_abs_64qam_epi16_256(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_p1, + simde__m256i a_r_m7_p1 = interference_abs_64qam_epi16_256(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_m1, + simde__m256i a_r_m7_m1 = interference_abs_64qam_epi16_256(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_m3, + simde__m256i a_r_m7_m3 = interference_abs_64qam_epi16_256(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_m5, + simde__m256i a_r_m7_m5 = interference_abs_64qam_epi16_256(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_r_m7_m7, + simde__m256i a_r_m7_m7 = interference_abs_64qam_epi16_256(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_p7, + simde__m256i a_i_p7_p7 = interference_abs_64qam_epi16_256(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_p5, + simde__m256i a_i_p7_p5 = interference_abs_64qam_epi16_256(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_p3, + simde__m256i a_i_p7_p3 = interference_abs_64qam_epi16_256(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_p1, + simde__m256i a_i_p7_p1 = interference_abs_64qam_epi16_256(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_m1, + simde__m256i a_i_p7_m1 = interference_abs_64qam_epi16_256(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_m3, + simde__m256i a_i_p7_m3 = interference_abs_64qam_epi16_256(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_m5, + simde__m256i a_i_p7_m5 = interference_abs_64qam_epi16_256(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p7_m7, + simde__m256i a_i_p7_m7 = interference_abs_64qam_epi16_256(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_p7, + simde__m256i a_i_p5_p7 = interference_abs_64qam_epi16_256(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_p5, + simde__m256i a_i_p5_p5 = interference_abs_64qam_epi16_256(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_p3, + simde__m256i a_i_p5_p3 = interference_abs_64qam_epi16_256(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_p1, + simde__m256i a_i_p5_p1 = interference_abs_64qam_epi16_256(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_m1, + simde__m256i a_i_p5_m1 = interference_abs_64qam_epi16_256(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_m3, + simde__m256i a_i_p5_m3 = interference_abs_64qam_epi16_256(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_m5, + simde__m256i a_i_p5_m5 = interference_abs_64qam_epi16_256(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p5_m7, + simde__m256i a_i_p5_m7 = interference_abs_64qam_epi16_256(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_p7, + simde__m256i a_i_p3_p7 = interference_abs_64qam_epi16_256(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_p5, + simde__m256i a_i_p3_p5 = interference_abs_64qam_epi16_256(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_p3, + simde__m256i a_i_p3_p3 = interference_abs_64qam_epi16_256(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_p1, + simde__m256i a_i_p3_p1 = interference_abs_64qam_epi16_256(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_m1, + simde__m256i a_i_p3_m1 = interference_abs_64qam_epi16_256(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_m3, + simde__m256i a_i_p3_m3 = interference_abs_64qam_epi16_256(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_m5, + simde__m256i a_i_p3_m5 = interference_abs_64qam_epi16_256(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p3_m7, + simde__m256i a_i_p3_m7 = interference_abs_64qam_epi16_256(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_p7, + simde__m256i a_i_p1_p7 = interference_abs_64qam_epi16_256(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_p5, + simde__m256i a_i_p1_p5 = interference_abs_64qam_epi16_256(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_p3, + simde__m256i a_i_p1_p3 = interference_abs_64qam_epi16_256(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_p1, + simde__m256i a_i_p1_p1 = interference_abs_64qam_epi16_256(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_m1, + simde__m256i a_i_p1_m1 = interference_abs_64qam_epi16_256(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_m3, + simde__m256i a_i_p1_m3 = interference_abs_64qam_epi16_256(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_m5, + simde__m256i a_i_p1_m5 = interference_abs_64qam_epi16_256(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_p1_m7, + simde__m256i a_i_p1_m7 = interference_abs_64qam_epi16_256(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_p7, + simde__m256i a_i_m1_p7 = interference_abs_64qam_epi16_256(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_p5, + simde__m256i a_i_m1_p5 = interference_abs_64qam_epi16_256(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_p3, + simde__m256i a_i_m1_p3 = interference_abs_64qam_epi16_256(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_p1, + simde__m256i a_i_m1_p1 = interference_abs_64qam_epi16_256(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_m1, + simde__m256i a_i_m1_m1 = interference_abs_64qam_epi16_256(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_m3, + simde__m256i a_i_m1_m3 = interference_abs_64qam_epi16_256(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_m5, + simde__m256i a_i_m1_m5 = interference_abs_64qam_epi16_256(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m1_m7, + simde__m256i a_i_m1_m7 = interference_abs_64qam_epi16_256(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_p7, + simde__m256i a_i_m3_p7 = interference_abs_64qam_epi16_256(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_p5, + simde__m256i a_i_m3_p5 = interference_abs_64qam_epi16_256(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_p3, + simde__m256i a_i_m3_p3 = interference_abs_64qam_epi16_256(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_p1, + simde__m256i a_i_m3_p1 = interference_abs_64qam_epi16_256(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_m1, + simde__m256i a_i_m3_m1 = interference_abs_64qam_epi16_256(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_m3, + simde__m256i a_i_m3_m3 = interference_abs_64qam_epi16_256(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_m5, + simde__m256i a_i_m3_m5 = interference_abs_64qam_epi16_256(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m3_m7, + simde__m256i a_i_m3_m7 = interference_abs_64qam_epi16_256(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_p7, + simde__m256i a_i_m5_p7 = interference_abs_64qam_epi16_256(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_p5, + simde__m256i a_i_m5_p5 = interference_abs_64qam_epi16_256(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_p3, + simde__m256i a_i_m5_p3 = interference_abs_64qam_epi16_256(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_p1, + simde__m256i a_i_m5_p1 = interference_abs_64qam_epi16_256(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_m1, + simde__m256i a_i_m5_m1 = interference_abs_64qam_epi16_256(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_m3, + simde__m256i a_i_m5_m3 = interference_abs_64qam_epi16_256(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_m5, + simde__m256i a_i_m5_m5 = interference_abs_64qam_epi16_256(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m5_m7, + simde__m256i a_i_m5_m7 = interference_abs_64qam_epi16_256(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_p7, + simde__m256i a_i_m7_p7 = interference_abs_64qam_epi16_256(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_p5, + simde__m256i a_i_m7_p5 = interference_abs_64qam_epi16_256(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_p3, + simde__m256i a_i_m7_p3 = interference_abs_64qam_epi16_256(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_p1, + simde__m256i a_i_m7_p1 = interference_abs_64qam_epi16_256(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_m1, + simde__m256i a_i_m7_m1 = interference_abs_64qam_epi16_256(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_m3, + simde__m256i a_i_m7_m3 = interference_abs_64qam_epi16_256(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_m5, + simde__m256i a_i_m7_m5 = interference_abs_64qam_epi16_256(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16_256(psi_i_m7_m7, + simde__m256i a_i_m7_m7 = interference_abs_64qam_epi16_256(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, - a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); // Calculation of a group of two terms in the bit metric involving product of psi and interference - prodsum_psi_a_epi16_256(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7); - prodsum_psi_a_epi16_256(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5); - prodsum_psi_a_epi16_256(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3); - prodsum_psi_a_epi16_256(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1); - prodsum_psi_a_epi16_256(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1); - prodsum_psi_a_epi16_256(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3); - prodsum_psi_a_epi16_256(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5); - prodsum_psi_a_epi16_256(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7); - prodsum_psi_a_epi16_256(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7); - prodsum_psi_a_epi16_256(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5); - prodsum_psi_a_epi16_256(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3); - prodsum_psi_a_epi16_256(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1); - prodsum_psi_a_epi16_256(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1); - prodsum_psi_a_epi16_256(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3); - prodsum_psi_a_epi16_256(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5); - prodsum_psi_a_epi16_256(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7); - prodsum_psi_a_epi16_256(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7); - prodsum_psi_a_epi16_256(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5); - prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16_256(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5); - prodsum_psi_a_epi16_256(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7); - prodsum_psi_a_epi16_256(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7); - prodsum_psi_a_epi16_256(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5); - prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16_256(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5); - prodsum_psi_a_epi16_256(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7); - prodsum_psi_a_epi16_256(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7); - prodsum_psi_a_epi16_256(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5); - prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16_256(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5); - prodsum_psi_a_epi16_256(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7); - prodsum_psi_a_epi16_256(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7); - prodsum_psi_a_epi16_256(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5); - prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); - prodsum_psi_a_epi16_256(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5); - prodsum_psi_a_epi16_256(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7); - prodsum_psi_a_epi16_256(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7); - prodsum_psi_a_epi16_256(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5); - prodsum_psi_a_epi16_256(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3); - prodsum_psi_a_epi16_256(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1); - prodsum_psi_a_epi16_256(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1); - prodsum_psi_a_epi16_256(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3); - prodsum_psi_a_epi16_256(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5); - prodsum_psi_a_epi16_256(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7); - prodsum_psi_a_epi16_256(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7); - prodsum_psi_a_epi16_256(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5); - prodsum_psi_a_epi16_256(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3); - prodsum_psi_a_epi16_256(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1); - prodsum_psi_a_epi16_256(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1); - prodsum_psi_a_epi16_256(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3); - prodsum_psi_a_epi16_256(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5); - prodsum_psi_a_epi16_256(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7); + simde__m256i psi_a_p7_p7 = prodsum_psi_a_epi16_256(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7); + simde__m256i psi_a_p7_p5 = prodsum_psi_a_epi16_256(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5); + simde__m256i psi_a_p7_p3 = prodsum_psi_a_epi16_256(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3); + simde__m256i psi_a_p7_p1 = prodsum_psi_a_epi16_256(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1); + simde__m256i psi_a_p7_m1 = prodsum_psi_a_epi16_256(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1); + simde__m256i psi_a_p7_m3 = prodsum_psi_a_epi16_256(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3); + simde__m256i psi_a_p7_m5 = prodsum_psi_a_epi16_256(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5); + simde__m256i psi_a_p7_m7 = prodsum_psi_a_epi16_256(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7); + simde__m256i psi_a_p5_p7 = prodsum_psi_a_epi16_256(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7); + simde__m256i psi_a_p5_p5 = prodsum_psi_a_epi16_256(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5); + simde__m256i psi_a_p5_p3 = prodsum_psi_a_epi16_256(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3); + simde__m256i psi_a_p5_p1 = prodsum_psi_a_epi16_256(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1); + simde__m256i psi_a_p5_m1 = prodsum_psi_a_epi16_256(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1); + simde__m256i psi_a_p5_m3 = prodsum_psi_a_epi16_256(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3); + simde__m256i psi_a_p5_m5 = prodsum_psi_a_epi16_256(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5); + simde__m256i psi_a_p5_m7 = prodsum_psi_a_epi16_256(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7); + simde__m256i psi_a_p3_p7 = prodsum_psi_a_epi16_256(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7); + simde__m256i psi_a_p3_p5 = prodsum_psi_a_epi16_256(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5); + simde__m256i psi_a_p3_p3 = prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + simde__m256i psi_a_p3_p1 = prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + simde__m256i psi_a_p3_m1 = prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + simde__m256i psi_a_p3_m3 = prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + simde__m256i psi_a_p3_m5 = prodsum_psi_a_epi16_256(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5); + simde__m256i psi_a_p3_m7 = prodsum_psi_a_epi16_256(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7); + simde__m256i psi_a_p1_p7 = prodsum_psi_a_epi16_256(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7); + simde__m256i psi_a_p1_p5 = prodsum_psi_a_epi16_256(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5); + simde__m256i psi_a_p1_p3 = prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + simde__m256i psi_a_p1_p1 = prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + simde__m256i psi_a_p1_m1 = prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + simde__m256i psi_a_p1_m3 = prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + simde__m256i psi_a_p1_m5 = prodsum_psi_a_epi16_256(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5); + simde__m256i psi_a_p1_m7 = prodsum_psi_a_epi16_256(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7); + simde__m256i psi_a_m1_p7 = prodsum_psi_a_epi16_256(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7); + simde__m256i psi_a_m1_p5 = prodsum_psi_a_epi16_256(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5); + simde__m256i psi_a_m1_p3 = prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + simde__m256i psi_a_m1_p1 = prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + simde__m256i psi_a_m1_m1 = prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + simde__m256i psi_a_m1_m3 = prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + simde__m256i psi_a_m1_m5 = prodsum_psi_a_epi16_256(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5); + simde__m256i psi_a_m1_m7 = prodsum_psi_a_epi16_256(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7); + simde__m256i psi_a_m3_p7 = prodsum_psi_a_epi16_256(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7); + simde__m256i psi_a_m3_p5 = prodsum_psi_a_epi16_256(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5); + simde__m256i psi_a_m3_p3 = prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + simde__m256i psi_a_m3_p1 = prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + simde__m256i psi_a_m3_m1 = prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + simde__m256i psi_a_m3_m3 = prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); + simde__m256i psi_a_m3_m5 = prodsum_psi_a_epi16_256(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5); + simde__m256i psi_a_m3_m7 = prodsum_psi_a_epi16_256(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7); + simde__m256i psi_a_m5_p7 = prodsum_psi_a_epi16_256(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7); + simde__m256i psi_a_m5_p5 = prodsum_psi_a_epi16_256(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5); + simde__m256i psi_a_m5_p3 = prodsum_psi_a_epi16_256(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3); + simde__m256i psi_a_m5_p1 = prodsum_psi_a_epi16_256(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1); + simde__m256i psi_a_m5_m1 = prodsum_psi_a_epi16_256(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1); + simde__m256i psi_a_m5_m3 = prodsum_psi_a_epi16_256(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3); + simde__m256i psi_a_m5_m5 = prodsum_psi_a_epi16_256(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5); + simde__m256i psi_a_m5_m7 = prodsum_psi_a_epi16_256(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7); + simde__m256i psi_a_m7_p7 = prodsum_psi_a_epi16_256(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7); + simde__m256i psi_a_m7_p5 = prodsum_psi_a_epi16_256(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5); + simde__m256i psi_a_m7_p3 = prodsum_psi_a_epi16_256(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3); + simde__m256i psi_a_m7_p1 = prodsum_psi_a_epi16_256(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1); + simde__m256i psi_a_m7_m1 = prodsum_psi_a_epi16_256(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1); + simde__m256i psi_a_m7_m3 = prodsum_psi_a_epi16_256(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3); + simde__m256i psi_a_m7_m5 = prodsum_psi_a_epi16_256(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5); + simde__m256i psi_a_m7_m7 = prodsum_psi_a_epi16_256(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7); // Multiply by sqrt(2) psi_a_p7_p7 = simde_mm256_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); @@ -6195,70 +5959,70 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, psi_a_m7_m7 = simde_mm256_slli_epi16(psi_a_m7_m7, 2); // Calculation of a group of two terms in the bit metric involving squares of interference - square_a_64qam_epi16_256(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7); - square_a_64qam_epi16_256(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5); - square_a_64qam_epi16_256(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3); - square_a_64qam_epi16_256(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1); - square_a_64qam_epi16_256(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1); - square_a_64qam_epi16_256(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3); - square_a_64qam_epi16_256(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5); - square_a_64qam_epi16_256(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7); - square_a_64qam_epi16_256(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7); - square_a_64qam_epi16_256(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5); - square_a_64qam_epi16_256(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3); - square_a_64qam_epi16_256(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1); - square_a_64qam_epi16_256(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1); - square_a_64qam_epi16_256(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3); - square_a_64qam_epi16_256(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5); - square_a_64qam_epi16_256(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7); - square_a_64qam_epi16_256(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7); - square_a_64qam_epi16_256(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5); - square_a_64qam_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3); - square_a_64qam_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1); - square_a_64qam_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1); - square_a_64qam_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3); - square_a_64qam_epi16_256(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5); - square_a_64qam_epi16_256(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7); - square_a_64qam_epi16_256(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7); - square_a_64qam_epi16_256(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5); - square_a_64qam_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3); - square_a_64qam_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1); - square_a_64qam_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1); - square_a_64qam_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3); - square_a_64qam_epi16_256(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5); - square_a_64qam_epi16_256(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7); - square_a_64qam_epi16_256(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7); - square_a_64qam_epi16_256(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5); - square_a_64qam_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3); - square_a_64qam_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1); - square_a_64qam_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1); - square_a_64qam_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3); - square_a_64qam_epi16_256(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5); - square_a_64qam_epi16_256(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7); - square_a_64qam_epi16_256(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7); - square_a_64qam_epi16_256(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5); - square_a_64qam_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3); - square_a_64qam_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1); - square_a_64qam_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1); - square_a_64qam_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3); - square_a_64qam_epi16_256(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5); - square_a_64qam_epi16_256(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7); - square_a_64qam_epi16_256(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7); - square_a_64qam_epi16_256(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5); - square_a_64qam_epi16_256(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3); - square_a_64qam_epi16_256(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1); - square_a_64qam_epi16_256(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1); - square_a_64qam_epi16_256(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3); - square_a_64qam_epi16_256(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5); - square_a_64qam_epi16_256(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7); - square_a_64qam_epi16_256(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7); - square_a_64qam_epi16_256(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5); - square_a_64qam_epi16_256(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3); - square_a_64qam_epi16_256(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1); - square_a_64qam_epi16_256(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1); - square_a_64qam_epi16_256(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3); - square_a_64qam_epi16_256(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5); - square_a_64qam_epi16_256(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7); + simde__m256i a_sq_p7_p7 = square_a_64qam_epi16_256(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_p5 = square_a_64qam_epi16_256(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_p3 = square_a_64qam_epi16_256(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_p1 = square_a_64qam_epi16_256(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_m1 = square_a_64qam_epi16_256(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_m3 = square_a_64qam_epi16_256(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_m5 = square_a_64qam_epi16_256(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p7_m7 = square_a_64qam_epi16_256(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_p7 = square_a_64qam_epi16_256(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_p5 = square_a_64qam_epi16_256(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_p3 = square_a_64qam_epi16_256(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_p1 = square_a_64qam_epi16_256(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_m1 = square_a_64qam_epi16_256(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_m3 = square_a_64qam_epi16_256(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_m5 = square_a_64qam_epi16_256(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p5_m7 = square_a_64qam_epi16_256(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_p7 = square_a_64qam_epi16_256(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_p5 = square_a_64qam_epi16_256(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_p3 = square_a_64qam_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_p1 = square_a_64qam_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_m1 = square_a_64qam_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_m3 = square_a_64qam_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_m5 = square_a_64qam_epi16_256(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p3_m7 = square_a_64qam_epi16_256(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_p7 = square_a_64qam_epi16_256(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_p5 = square_a_64qam_epi16_256(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_p3 = square_a_64qam_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_p1 = square_a_64qam_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_m1 = square_a_64qam_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_m3 = square_a_64qam_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_m5 = square_a_64qam_epi16_256(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_p1_m7 = square_a_64qam_epi16_256(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_p7 = square_a_64qam_epi16_256(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_p5 = square_a_64qam_epi16_256(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_p3 = square_a_64qam_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_p1 = square_a_64qam_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_m1 = square_a_64qam_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_m3 = square_a_64qam_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_m5 = square_a_64qam_epi16_256(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m1_m7 = square_a_64qam_epi16_256(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_p7 = square_a_64qam_epi16_256(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_p5 = square_a_64qam_epi16_256(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_p3 = square_a_64qam_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_p1 = square_a_64qam_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_m1 = square_a_64qam_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_m3 = square_a_64qam_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_m5 = square_a_64qam_epi16_256(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m3_m7 = square_a_64qam_epi16_256(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_p7 = square_a_64qam_epi16_256(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_p5 = square_a_64qam_epi16_256(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_p3 = square_a_64qam_epi16_256(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_p1 = square_a_64qam_epi16_256(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_m1 = square_a_64qam_epi16_256(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_m3 = square_a_64qam_epi16_256(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_m5 = square_a_64qam_epi16_256(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m5_m7 = square_a_64qam_epi16_256(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_p7 = square_a_64qam_epi16_256(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_p5 = square_a_64qam_epi16_256(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_p3 = square_a_64qam_epi16_256(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_p1 = square_a_64qam_epi16_256(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_m1 = square_a_64qam_epi16_256(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_m3 = square_a_64qam_epi16_256(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_m5 = square_a_64qam_epi16_256(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR); + simde__m256i a_sq_m7_m7 = square_a_64qam_epi16_256(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR); // Computing different multiples of ||h0||^2 // x=1, y=1 From 3ce1f6517dd1ac70630a6798cf84a41ec8d24add Mon Sep 17 00:00:00 2001 From: Quency Date: Wed, 12 Jul 2023 16:30:52 +0200 Subject: [PATCH 03/18] fix / warnings in nr_ulsch_llr_computation.c --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 283 +++++++++--------- 1 file changed, 136 insertions(+), 147 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index d1735b5377..430e66041e 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -655,27 +655,27 @@ static inline simde__m256i prodsum_psi_a_epi16_256(simde__m256i psi_r, simde__m2 } // Calculate interference magnitude -static inline void interference_abs_epi16(simde__m128i psi, simde__m128i int_ch_mag, simde__m128i int_mag, simde__m128i c1, simde__m128i c2) +static inline simde__m128i interference_abs_epi16(simde__m128i psi, simde__m128i int_ch_mag, simde__m128i c1, simde__m128i c2) { simde__m128i tmp_result = simde_mm_cmplt_epi16(psi, int_ch_mag); simde__m128i tmp_result2 = simde_mm_xor_si128(tmp_result, (*(simde__m128i *)&ones[0])); tmp_result = simde_mm_and_si128(tmp_result, c1); tmp_result2 = simde_mm_and_si128(tmp_result2, c2); - int_mag = simde_mm_or_si128(tmp_result, tmp_result2); + return simde_mm_or_si128(tmp_result, tmp_result2); } // Calculate interference magnitude -static inline void interference_abs_epi16_256(simde__m256i psi, simde__m256i int_ch_mag, simde__m256i int_mag, simde__m256i c1, simde__m256i c2) +static inline simde__m256i interference_abs_epi16_256(simde__m256i psi, simde__m256i int_ch_mag, simde__m256i c1, simde__m256i c2) { simde__m256i tmp_result = simde_mm256_cmpgt_epi16(int_ch_mag, psi); simde__m256i tmp_result2 = simde_mm256_xor_si256(tmp_result, (*(simde__m256i *)&ones256[0])); tmp_result = simde_mm256_and_si256(tmp_result, c1); tmp_result2 = simde_mm256_and_si256(tmp_result2, c2); - int_mag = simde_mm256_or_si256(tmp_result, tmp_result2); + return simde_mm256_or_si256(tmp_result, tmp_result2); } // Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor -static inline void square_a_epi16(simde__m128i a_r, simde__m128i a_i, simde__m128i int_ch_mag, simde__m128i scale_factor, simde__m128i a_sq) +static inline simde__m128i square_a_epi16(simde__m128i a_r, simde__m128i a_i, simde__m128i int_ch_mag, simde__m128i scale_factor) { simde__m128i tmp_result = simde_mm_mulhi_epi16(a_r, a_r); tmp_result = simde_mm_slli_epi16(tmp_result, 1); @@ -689,11 +689,11 @@ static inline void square_a_epi16(simde__m128i a_r, simde__m128i a_i, simde__m12 tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); tmp_result2 = simde_mm_mulhi_epi16(tmp_result2, int_ch_mag); tmp_result2 = simde_mm_slli_epi16(tmp_result2, 1); - a_sq = simde_mm_adds_epi16(tmp_result, tmp_result2); + return simde_mm_adds_epi16(tmp_result, tmp_result2); } // Calculates a_sq = int_ch_mag * (a_r^2 + a_i^2) * scale_factor -static inline void square_a_epi16_256(simde__m256i a_r, simde__m256i a_i, simde__m256i int_ch_mag, simde__m256i scale_factor, simde__m256i a_sq) +static inline simde__m256i square_a_epi16_256(simde__m256i a_r, simde__m256i a_i, simde__m256i int_ch_mag, simde__m256i scale_factor) { simde__m256i tmp_result = simde_mm256_mulhi_epi16(a_r, a_r); tmp_result = simde_mm256_slli_epi16(tmp_result, 1); @@ -707,7 +707,7 @@ static inline void square_a_epi16_256(simde__m256i a_r, simde__m256i a_i, simde_ tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); tmp_result2 = simde_mm256_mulhi_epi16(tmp_result2, int_ch_mag); tmp_result2 = simde_mm256_slli_epi16(tmp_result2, 1); - a_sq = simde_mm256_adds_epi16(tmp_result, tmp_result2); + return simde_mm256_adds_epi16(tmp_result, tmp_result2); } // calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM @@ -951,9 +951,6 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m128i y1r __attribute__((aligned(16))); simde__m128i y1i __attribute__((aligned(16))); - simde__m128i tmp_result __attribute__((aligned(16))); - simde__m128i tmp_result2 __attribute__((aligned(16))); - // In one iteration, we deal with 8 REs for (int i = 0; i < length >> 2; i += 2) { @@ -1086,74 +1083,74 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, y0_m_3_3 = simde_mm_subs_epi16(y0r_three_over_sqrt10, y0i_three_over_sqrt10); // Compute optimal interfering symbol magnitude - interference_abs_epi16(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_p1 = interference_abs_epi16(psi_r_p1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_p1 = interference_abs_epi16(psi_i_p1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_p3 = interference_abs_epi16(psi_r_p1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_p3 = interference_abs_epi16(psi_i_p1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_m1 = interference_abs_epi16(psi_r_p1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_m1 = interference_abs_epi16(psi_i_p1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_m3 = interference_abs_epi16(psi_r_p1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_m3 = interference_abs_epi16(psi_i_p1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_p1 = interference_abs_epi16(psi_r_p3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_p1 = interference_abs_epi16(psi_i_p3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_p3 = interference_abs_epi16(psi_r_p3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_p3 = interference_abs_epi16(psi_i_p3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_m1 = interference_abs_epi16(psi_r_p3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_m1 = interference_abs_epi16(psi_i_p3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_m3 = interference_abs_epi16(psi_r_p3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_m3 = interference_abs_epi16(psi_i_p3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_p1 = interference_abs_epi16(psi_r_m1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_p1 = interference_abs_epi16(psi_i_m1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_p3 = interference_abs_epi16(psi_r_m1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_p3 = interference_abs_epi16(psi_i_m1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_m1 = interference_abs_epi16(psi_r_m1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_m1 = interference_abs_epi16(psi_i_m1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_m3 = interference_abs_epi16(psi_r_m1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_m3 = interference_abs_epi16(psi_i_m1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_p1 = interference_abs_epi16(psi_r_m3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_p1 = interference_abs_epi16(psi_i_m3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_p3 = interference_abs_epi16(psi_r_m3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_p3 = interference_abs_epi16(psi_i_m3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_m1 = interference_abs_epi16(psi_r_m3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_m1 = interference_abs_epi16(psi_i_m3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_m3 = interference_abs_epi16(psi_r_m3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_m3 = interference_abs_epi16(psi_i_m3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude - simde__m128i psi_a_p1_p1 = prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); - simde__m128i psi_a_p1_p3 = prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); - simde__m128i psi_a_p3_p1 = prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); - simde__m128i psi_a_p3_p3 = prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); - simde__m128i psi_a_p1_m1 = prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); - simde__m128i psi_a_p1_m3 = prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); - simde__m128i psi_a_p3_m1 = prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); - simde__m128i psi_a_p3_m3 = prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); - simde__m128i psi_a_m1_p1 = prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); - simde__m128i psi_a_m1_p3 = prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); - simde__m128i psi_a_m3_p1 = prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); - simde__m128i psi_a_m3_p3 = prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); - simde__m128i psi_a_m1_m1 = prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); - simde__m128i psi_a_m1_m3 = prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); - simde__m128i psi_a_m3_m1 = prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); - simde__m128i psi_a_m3_m3 = prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); + psi_a_p1_p1 = prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + psi_a_p1_p3 = prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + psi_a_p3_p1 = prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + psi_a_p3_p3 = prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + psi_a_p1_m1 = prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + psi_a_p1_m3 = prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + psi_a_p3_m1 = prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + psi_a_p3_m3 = prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + psi_a_m1_p1 = prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + psi_a_m1_p3 = prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + psi_a_m3_p1 = prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + psi_a_m3_p3 = prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + psi_a_m1_m1 = prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + psi_a_m1_m3 = prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + psi_a_m3_m1 = prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + psi_a_m3_m3 = prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); // squared interference magnitude times int. ch. power - square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); - square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3); - square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1); - square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3); - square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1); - square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3); - square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1); - square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3); - square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1); - square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3); - square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1); - square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3); - square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1); - square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3); - square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1); - square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3); + a_sq_p1_p1 = square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_p3 = square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_p1 = square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_p3 = square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_m1 = square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_m3 = square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_m1 = square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_m3 = square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_p1 = square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_p3 = square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_p1 = square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_p3 = square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_m1 = square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_m3 = square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_m1 = square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_m3 = square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR); // Computing different multiples of channel norms ch_mag_over_10 = simde_mm_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10); @@ -1350,8 +1347,6 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m256i ch_mag_over_2; simde__m256i ch_mag_9_over_10; - simde__m256i xmm0 __attribute__((aligned(16))); - simde__m256i xmm1 __attribute__((aligned(16))); simde__m256i xmm2 __attribute__((aligned(16))); simde__m256i xmm3 __attribute__((aligned(16))); simde__m256i xmm4 __attribute__((aligned(16))); @@ -1486,9 +1481,6 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m256i y1r __attribute__((aligned(16))); simde__m256i y1i __attribute__((aligned(16))); - simde__m256i tmp_result __attribute__((aligned(16))); - simde__m256i tmp_result2 __attribute__((aligned(16))); - // In one iteration, we deal with 8 REs for (int i = 0; i < length >> 3; i += 2) { @@ -1522,7 +1514,6 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, // Rearrange interfering MF output simde_mm256_separate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i + 1]); - xmm0 = simde_mm256_setzero_si256(); // ZERO xmm2 = simde_mm256_subs_epi16(rho_rpi_1_1, y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r psi_r_p1_p1 = simde_mm256_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r| @@ -1621,74 +1612,74 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, y0_m_3_3 = simde_mm256_subs_epi16(y0r_three_over_sqrt10, y0i_three_over_sqrt10); // Compute optimal interfering symbol magnitude - interference_abs_epi16_256(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16_256(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_p1 = interference_abs_epi16_256(psi_r_p1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_p1 = interference_abs_epi16_256(psi_i_p1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_p3 = interference_abs_epi16_256(psi_r_p1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_p3 = interference_abs_epi16_256(psi_i_p1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_m1 = interference_abs_epi16_256(psi_r_p1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_m1 = interference_abs_epi16_256(psi_i_p1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p1_m3 = interference_abs_epi16_256(psi_r_p1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p1_m3 = interference_abs_epi16_256(psi_i_p1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_p1 = interference_abs_epi16_256(psi_r_p3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_p1 = interference_abs_epi16_256(psi_i_p3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_p3 = interference_abs_epi16_256(psi_r_p3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_p3 = interference_abs_epi16_256(psi_i_p3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_m1 = interference_abs_epi16_256(psi_r_p3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_m1 = interference_abs_epi16_256(psi_i_p3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_p3_m3 = interference_abs_epi16_256(psi_r_p3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_p3_m3 = interference_abs_epi16_256(psi_i_p3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_p1 = interference_abs_epi16_256(psi_r_m1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_p1 = interference_abs_epi16_256(psi_i_m1_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_p3 = interference_abs_epi16_256(psi_r_m1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_p3 = interference_abs_epi16_256(psi_i_m1_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_m1 = interference_abs_epi16_256(psi_r_m1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_m1 = interference_abs_epi16_256(psi_i_m1_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m1_m3 = interference_abs_epi16_256(psi_r_m1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m1_m3 = interference_abs_epi16_256(psi_i_m1_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_p1 = interference_abs_epi16_256(psi_r_m3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_p1 = interference_abs_epi16_256(psi_i_m3_p1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_p3 = interference_abs_epi16_256(psi_r_m3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_p3 = interference_abs_epi16_256(psi_i_m3_p3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_m1 = interference_abs_epi16_256(psi_r_m3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_m1 = interference_abs_epi16_256(psi_i_m3_m1, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_r_m3_m3 = interference_abs_epi16_256(psi_r_m3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); + a_i_m3_m3 = interference_abs_epi16_256(psi_i_m3_m3, ch_mag_int, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude - simde__m256i psi_a_p1_p1 = prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); - simde__m256i psi_a_p1_p3 = prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); - simde__m256i psi_a_p3_p1 = prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); - simde__m256i psi_a_p3_p3 = prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); - simde__m256i psi_a_p1_m1 = prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); - simde__m256i psi_a_p1_m3 = prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); - simde__m256i psi_a_p3_m1 = prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); - simde__m256i psi_a_p3_m3 = prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); - simde__m256i psi_a_m1_p1 = prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); - simde__m256i psi_a_m1_p3 = prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); - simde__m256i psi_a_m3_p1 = prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); - simde__m256i psi_a_m3_p3 = prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); - simde__m256i psi_a_m1_m1 = prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); - simde__m256i psi_a_m1_m3 = prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); - simde__m256i psi_a_m3_m1 = prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); - simde__m256i psi_a_m3_m3 = prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); + psi_a_p1_p1 = prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); + psi_a_p1_p3 = prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); + psi_a_p3_p1 = prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); + psi_a_p3_p3 = prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); + psi_a_p1_m1 = prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); + psi_a_p1_m3 = prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); + psi_a_p3_m1 = prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); + psi_a_p3_m3 = prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); + psi_a_m1_p1 = prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); + psi_a_m1_p3 = prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); + psi_a_m3_p1 = prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); + psi_a_m3_p3 = prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); + psi_a_m1_m1 = prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); + psi_a_m1_m3 = prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); + psi_a_m3_m1 = prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); + psi_a_m3_m3 = prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); // squared interference magnitude times int. ch. power - square_a_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); - square_a_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3); - square_a_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1); - square_a_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3); - square_a_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1); - square_a_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3); - square_a_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1); - square_a_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3); - square_a_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1); - square_a_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3); - square_a_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1); - square_a_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3); - square_a_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1); - square_a_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3); - square_a_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1); - square_a_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3); + a_sq_p1_p1 = square_a_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_p3 = square_a_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_p1 = square_a_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_p3 = square_a_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_m1 = square_a_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p1_m3 = square_a_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_m1 = square_a_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_p3_m3 = square_a_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_p1 = square_a_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_p3 = square_a_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_p1 = square_a_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_p3 = square_a_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_m1 = square_a_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m1_m3 = square_a_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_m1 = square_a_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR); + a_sq_m3_m3 = square_a_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR); // Computing different multiples of channel norms ch_mag_over_10 = simde_mm256_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10); @@ -2352,7 +2343,6 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_int_with_sigma2 = simde_mm_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m128i tmp_result, tmp_result2, tmp_result3, tmp_result4; simde__m128i a_r_p7_p7 = interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, @@ -4735,7 +4725,6 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_int_with_sigma2 = simde_mm256_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m256i tmp_result, tmp_result2, tmp_result3, tmp_result4; simde__m256i a_r_p7_p7 = interference_abs_64qam_epi16_256(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, From b46479889d8232e8a60845fadd8545d3f5f80781 Mon Sep 17 00:00:00 2001 From: Quency Date: Thu, 13 Jul 2023 00:39:38 +0200 Subject: [PATCH 04/18] misc / Reorder inlines and add architecture guard --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 173 +++++++++--------- 1 file changed, 89 insertions(+), 84 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 430e66041e..53aa602744 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -574,10 +574,10 @@ void nr_ulsch_qpsk_qpsk(c16_t *stream0_in, c16_t *stream1_in, c16_t *stream0_out } -static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; -static const int16_t ones256[16] __attribute__((aligned(32))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; +#ifdef USE_128BIT + +static const int16_t ones[8] __attribute__((aligned(16))) = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; // calculate interference magnitude // tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 4 Date: Thu, 13 Jul 2023 00:57:55 +0200 Subject: [PATCH 05/18] feat / SISO: Use 128/256 SIMDe for ARM64/x86 --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 169 +++++++++++++++++- 1 file changed, 164 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 53aa602744..bebd50601b 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -66,6 +66,36 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, uint32_t nb_re, uint8_t symbol) { +#ifdef USE_128BIT + simde__m128i *rxF = (simde__m128i*)rxdataF_comp; + simde__m128i *ch_mag; + simde__m128i llr128[2]; + register simde__m128i xmm0; + simde__m64 *llr64 = (simde__m64*) ulsch_llr; + int i; + int nb_rb = nb_re / NR_NB_SC_PER_RB; + int off = ((nb_rb&1) == 1)? 4:0; + + ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; + nb_re >>= 2; // length in quad words (4 REs) + nb_re += ((nb_re&3) == 0 ? 0 : 1); + + // Each iteration does 4 RE (gives 16 16bit-llrs) + for (i=0; i |y_R|, registers of odd index in xmm0-> |y_I| + xmm0 = simde_mm_subs_epi16(ch_mag[i],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 + + llr128[0] = simde_mm_unpacklo_epi32(rxF[i],xmm0); // llr128[0] contains the llrs of the 1st,2nd,5th and 6th REs + llr128[1] = simde_mm_unpackhi_epi32(rxF[i],xmm0); // llr128[1] contains the llrs of the 3rd, 4th, 7th and 8th REs + + llr64[0] = (simde__m64)simde_mm_extract_epi64(llr128[0], 0); // llr32[0] low 16 bits-> y_R, high 16 bits-> y_I + llr64[1] = (simde__m64)simde_mm_extract_epi64(llr128[0], 1); // llr32[2] low 16 bits-> y_R, high 16 bits-> y_I + llr64[2] = (simde__m64)simde_mm_extract_epi64(llr128[1], 0); // llr32[4] low 16 bits-> y_R, high 16 bits-> y_I + llr64[3] = (simde__m64)simde_mm_extract_epi64(llr128[1], 1); // llr32[6] low 16 bits-> y_R, high 16 bits-> y_I + + llr64 += 4; + } +#else simde__m256i *rxF_256 = (simde__m256i*)rxdataF_comp; simde__m256i *ch_mag = (simde__m256i*)ul_ch_mag; int64_t *llr_64 = (int64_t*)ulsch_llr; @@ -91,6 +121,8 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, *llr_64++ = simde_mm256_extract_epi64(xmm2, 2); *llr_64++ = simde_mm256_extract_epi64(xmm2, 3); } +#endif + simde_mm_empty(); } //---------------------------------------------------------------------------------------------- @@ -104,6 +136,38 @@ void nr_ulsch_64qam_llr(int32_t *rxdataF_comp, uint32_t nb_re, uint8_t symbol) { +#ifdef USE_128BIT + int nb_rb = nb_re / NR_NB_SC_PER_RB; + int off = ((nb_rb&1) == 1)? 4:0; + + simde__m128i *rxF = (simde__m128i*)rxdataF_comp; + simde__m128i *ch_mag,*ch_magb; + register simde__m128i xmm0,xmm1,xmm2; + int i; + ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; + ch_magb = (simde__m128i*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; + + nb_re = nb_re>>2; // length in 128-bit words (4 REs) + nb_re += ((nb_re&3) == 0 ? 0 : 1); + simde__m64 *llr64 = (simde__m64 *) ulsch_llr; + + // Each iteration does 4 RE (gives 24 16bit-llrs) + for (i=0; i> 2; // length in 128-bit words (4 REs) + + for (int i=0; i |y_R|, registers of odd index in xmm0-> |y_I| + xmm0 = simde_mm_subs_epi16(ch_mag[i], xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 + xmm1 = simde_mm_abs_epi16(xmm0); + xmm1 = simde_mm_subs_epi16(ch_magb[i], xmm1); // contains 8 LLRs + xmm2 = simde_mm_abs_epi16(xmm1); + xmm2 = simde_mm_subs_epi16(ch_magc[i], xmm2); // contains 8 LLRs + // rxF[i] A0 A1 A2 A3 + // xmm0 B0 B1 B2 B3 + // xmm1 C0 C1 C2 C3 + // xmm2 D0 D1 D2 D3 + xmm3 = simde_mm_unpacklo_epi32(rxF[i], xmm0); // A0 B0 A1 B1 + xmm4 = simde_mm_unpackhi_epi32(rxF[i], xmm0); // A2 B2 A3 B3 + xmm5 = simde_mm_unpacklo_epi32(xmm1, xmm2); // C0 D0 C1 D1 + xmm6 = simde_mm_unpackhi_epi32(xmm1, xmm2); // C2 D2 C3 D3 + + llr128[0] = simde_mm_unpacklo_epi64(xmm3,xmm5); // A0 B0 C0 D0 + llr128[1] = simde_mm_unpackhi_epi64(xmm3,xmm5); // A1 B1 C1 D1 + llr128[2] = simde_mm_unpacklo_epi64(xmm4,xmm6); // A2 B2 C2 D2 + llr128[3] = simde_mm_unpackhi_epi64(xmm4,xmm6); // A3 B3 C3 D3 + llr128+=4; + } + + if (len_mod4) { + printf("len_mod4=%d\n", len_mod4); + int nb_re64 = nb_re >> 1; + simde__m64 *llr64 = (simde__m64 *)llr128; + simde__m64 xmm0,xmm1,xmm2; + simde__m64 *rxF = (simde__m64*)rxdataF_comp; + simde__m64 *ch_mag = (simde__m64*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; + simde__m64 *ch_magb = (simde__m64*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; + simde__m64 *ch_magc = (simde__m64*)&ul_ch_magc[(symbol*(off+(nb_rb*12)))]; + + xmm0 = simde_mm_abs_pi16(rxF[nb_re64-1]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| + xmm0 = simde_mm_subs_pi16(ch_mag[nb_re-1],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 + // xmmtmpD2 contains 4 LLRs + xmm1 = simde_mm_abs_pi16(xmm0); + xmm1 = simde_mm_subs_pi16(ch_magb[nb_re64-1],xmm1); // contains 4 LLRs + xmm2 = simde_mm_abs_pi16(xmm1); + xmm2 = simde_mm_subs_pi16(ch_magc[nb_re64-1],xmm2); // contains 4 LLRs + // rxF[i] A0 A1 + // xmm0 B0 B1 + // xmm1 C0 C1 + // xmm2 D0 D1 + llr64[0] = simde_m_punpckldq(rxF[nb_re64-1],xmm0); // A0 B0 + llr64[2] = simde_m_punpckhdq(rxF[nb_re64-1],xmm0); // A1 B1 + llr64[1] = simde_m_punpckldq(xmm1,xmm2); // C0 D0 + llr64[3] = simde_m_punpckhdq(xmm1,xmm2); // C1 D1 + } +#else simde__m256i *rxF = (simde__m256i*)rxdataF_comp; simde__m256i xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6; simde__m256i *llr256=(simde__m256i*)ulsch_llr; @@ -198,6 +328,8 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, *llr256++ = simde_mm256_permute2x128_si256(xmm0, xmm1, 0x31); // A4 B4 C4 D4 A5 B5 C5 D5 *llr256++ = simde_mm256_permute2x128_si256(xmm2, xmm3, 0x31); // A6 B6 C6 D6 A7 B7 C7 D7 } +#endif + simde_mm_empty(); } void nr_ulsch_compute_llr(int32_t *rxdataF_comp, @@ -568,9 +700,7 @@ void nr_ulsch_qpsk_qpsk(c16_t *stream0_in, c16_t *stream1_in, c16_t *stream0_out } } #endif - simde_mm_empty(); - simde_m_empty(); } @@ -1875,7 +2005,6 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, } #endif simde_mm_empty(); - simde_m_empty(); } /* @@ -6664,9 +6793,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, } } #endif - simde_mm_empty(); - simde_m_empty(); } static void nr_ulsch_shift_llr(int16_t **llr_layers, uint32_t nb_re, uint32_t rxdataF_ext_offset, uint8_t mod_order, int shift) @@ -6692,3 +6819,35 @@ static void nr_ulsch_shift_llr(int16_t **llr_layers, uint32_t nb_re, uint32_t rx llr_layers1[i] = simde_mm_srai_epi16(llr_layers1[i], shift); } } + +void nr_ulsch_compute_ML_llr(NR_gNB_PUSCH *pusch_vars, + uint32_t symbol, + c16_t* rxdataF_comp0, + c16_t* rxdataF_comp1, + c16_t* ul_ch_mag0, + c16_t* ul_ch_mag1, + c16_t* llr_layers0, + c16_t* llr_layers1, + c16_t* rho0, + c16_t* rho1, + uint32_t nb_re, + uint8_t mod_order) +{ + switch (mod_order) { + case 2: + nr_ulsch_qpsk_qpsk(rxdataF_comp0, rxdataF_comp1, llr_layers0, rho0, nb_re); + nr_ulsch_qpsk_qpsk(rxdataF_comp1, rxdataF_comp0, llr_layers1, rho1, nb_re); + nr_ulsch_shift_llr(pusch_vars->llr_layers, nb_re, pusch_vars->llr_offset[symbol] >> 1, 2, 4); + break; + case 4: + nr_ulsch_qam16_qam16(rxdataF_comp0, rxdataF_comp1, ul_ch_mag0, ul_ch_mag1, llr_layers0, rho0, nb_re); + nr_ulsch_qam16_qam16(rxdataF_comp1, rxdataF_comp0, ul_ch_mag1, ul_ch_mag0, llr_layers1, rho1, nb_re); + break; + case 6: + nr_ulsch_qam64_qam64(rxdataF_comp0, rxdataF_comp1, ul_ch_mag0, ul_ch_mag1, llr_layers0, rho0, nb_re); + nr_ulsch_qam64_qam64(rxdataF_comp1, rxdataF_comp0, ul_ch_mag1, ul_ch_mag0, llr_layers1, rho1, nb_re); + break; + default: + AssertFatal(1 == 0, "nr_ulsch_compute_llr: invalid Qm value, Qm = %d\n", mod_order); + } +} From 526363dfad608a8e3305436c4acfcbcdc06150d1 Mon Sep 17 00:00:00 2001 From: Tsung-Yu Chan Date: Thu, 20 Jul 2023 14:42:22 +0200 Subject: [PATCH 06/18] fix / add the static for max_epi16 --- openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index bebd50601b..742630c672 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -792,7 +792,7 @@ static inline simde__m128i square_a_64qam_epi16(simde__m128i a_r, simde__m128i a return simde_mm_adds_epi16(tmp_result, tmp_result2); } -simde__m128i max_epi16(simde__m128i m0, simde__m128i m1, simde__m128i m2, simde__m128i m3, simde__m128i m4, simde__m128i m5, simde__m128i m6, simde__m128i m7) +static inline simde__m128i max_epi16(simde__m128i m0, simde__m128i m1, simde__m128i m2, simde__m128i m3, simde__m128i m4, simde__m128i m5, simde__m128i m6, simde__m128i m7) { simde__m128i a0 = simde_mm_max_epi16(m0, m1); simde__m128i a1 = simde_mm_max_epi16(m2, m3); @@ -891,7 +891,7 @@ static inline simde__m256i square_a_64qam_epi16_256(simde__m256i a_r, simde__m25 return simde_mm256_adds_epi16(tmp_result, tmp_result2); } -simde__m256i max_epi16_256(simde__m256i m0, simde__m256i m1, simde__m256i m2, simde__m256i m3, simde__m256i m4, simde__m256i m5, simde__m256i m6, simde__m256i m7) +static inline simde__m256i max_epi16_256(simde__m256i m0, simde__m256i m1, simde__m256i m2, simde__m256i m3, simde__m256i m4, simde__m256i m5, simde__m256i m6, simde__m256i m7) { simde__m256i a0 = simde_mm256_max_epi16(m0, m1); simde__m256i a1 = simde_mm256_max_epi16(m2, m3); From 465fc55e20436d75c803f2df353f79ee8f2ab3b6 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Thu, 7 Sep 2023 10:22:40 +0200 Subject: [PATCH 07/18] Refactor: Make qam16_qam16 more compact Use local arrays and for-loop to replace duplicated statements. For reference, here is the table of index v.s. old local variable suffix. 0 p1_p1 0 rpi_1_1 1 p1_p3 1 rpi_1_3 2 p3_p1 2 rpi_3_1 3 p3_p3 3 rpi_3_3 4 p1_m1 4 rmi_1_1 5 p1_m3 5 rmi_1_3 6 p3_m1 6 rmi_3_1 7 p3_m3 7 rmi_3_3 8 m1_p1 9 m1_p3 10 m3_p1 11 m3_p3 12 m1_m1 13 m1_m3 14 m3_m1 15 m3_m3 --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 982 +++--------------- 1 file changed, 173 insertions(+), 809 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 742630c672..50a2da40fb 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -961,125 +961,14 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m128i rho_rpi __attribute__((aligned(16))); simde__m128i rho_rmi __attribute__((aligned(16))); - simde__m128i rho_rpi_1_1 __attribute__((aligned(16))); - simde__m128i rho_rpi_1_3 __attribute__((aligned(16))); - simde__m128i rho_rpi_3_1 __attribute__((aligned(16))); - simde__m128i rho_rpi_3_3 __attribute__((aligned(16))); - simde__m128i rho_rmi_1_1 __attribute__((aligned(16))); - simde__m128i rho_rmi_1_3 __attribute__((aligned(16))); - simde__m128i rho_rmi_3_1 __attribute__((aligned(16))); - simde__m128i rho_rmi_3_3 __attribute__((aligned(16))); - - simde__m128i psi_r_m3_m3 __attribute__((aligned(16))); - simde__m128i psi_r_m3_m1 __attribute__((aligned(16))); - simde__m128i psi_r_m3_p1 __attribute__((aligned(16))); - simde__m128i psi_r_m3_p3 __attribute__((aligned(16))); - simde__m128i psi_r_m1_m3 __attribute__((aligned(16))); - simde__m128i psi_r_m1_m1 __attribute__((aligned(16))); - simde__m128i psi_r_m1_p1 __attribute__((aligned(16))); - simde__m128i psi_r_m1_p3 __attribute__((aligned(16))); - simde__m128i psi_r_p1_m3 __attribute__((aligned(16))); - simde__m128i psi_r_p1_m1 __attribute__((aligned(16))); - simde__m128i psi_r_p1_p1 __attribute__((aligned(16))); - simde__m128i psi_r_p1_p3 __attribute__((aligned(16))); - simde__m128i psi_r_p3_m3 __attribute__((aligned(16))); - simde__m128i psi_r_p3_m1 __attribute__((aligned(16))); - simde__m128i psi_r_p3_p1 __attribute__((aligned(16))); - simde__m128i psi_r_p3_p3 __attribute__((aligned(16))); - - simde__m128i psi_i_m3_m3 __attribute__((aligned(16))); - simde__m128i psi_i_m3_m1 __attribute__((aligned(16))); - simde__m128i psi_i_m3_p1 __attribute__((aligned(16))); - simde__m128i psi_i_m3_p3 __attribute__((aligned(16))); - simde__m128i psi_i_m1_m3 __attribute__((aligned(16))); - simde__m128i psi_i_m1_m1 __attribute__((aligned(16))); - simde__m128i psi_i_m1_p1 __attribute__((aligned(16))); - simde__m128i psi_i_m1_p3 __attribute__((aligned(16))); - simde__m128i psi_i_p1_m3 __attribute__((aligned(16))); - simde__m128i psi_i_p1_m1 __attribute__((aligned(16))); - simde__m128i psi_i_p1_p1 __attribute__((aligned(16))); - simde__m128i psi_i_p1_p3 __attribute__((aligned(16))); - simde__m128i psi_i_p3_m3 __attribute__((aligned(16))); - simde__m128i psi_i_p3_m1 __attribute__((aligned(16))); - simde__m128i psi_i_p3_p1 __attribute__((aligned(16))); - simde__m128i psi_i_p3_p3 __attribute__((aligned(16))); - - simde__m128i a_r_m3_m3 __attribute__((aligned(16))); - simde__m128i a_r_m3_m1 __attribute__((aligned(16))); - simde__m128i a_r_m3_p1 __attribute__((aligned(16))); - simde__m128i a_r_m3_p3 __attribute__((aligned(16))); - simde__m128i a_r_m1_m3 __attribute__((aligned(16))); - simde__m128i a_r_m1_m1 __attribute__((aligned(16))); - simde__m128i a_r_m1_p1 __attribute__((aligned(16))); - simde__m128i a_r_m1_p3 __attribute__((aligned(16))); - simde__m128i a_r_p1_m3 __attribute__((aligned(16))); - simde__m128i a_r_p1_m1 __attribute__((aligned(16))); - simde__m128i a_r_p1_p1 __attribute__((aligned(16))); - simde__m128i a_r_p1_p3 __attribute__((aligned(16))); - simde__m128i a_r_p3_m3 __attribute__((aligned(16))); - simde__m128i a_r_p3_m1 __attribute__((aligned(16))); - simde__m128i a_r_p3_p1 __attribute__((aligned(16))); - simde__m128i a_r_p3_p3 __attribute__((aligned(16))); - - simde__m128i a_i_m3_m3 __attribute__((aligned(16))); - simde__m128i a_i_m3_m1 __attribute__((aligned(16))); - simde__m128i a_i_m3_p1 __attribute__((aligned(16))); - simde__m128i a_i_m3_p3 __attribute__((aligned(16))); - simde__m128i a_i_m1_m3 __attribute__((aligned(16))); - simde__m128i a_i_m1_m1 __attribute__((aligned(16))); - simde__m128i a_i_m1_p1 __attribute__((aligned(16))); - simde__m128i a_i_m1_p3 __attribute__((aligned(16))); - simde__m128i a_i_p1_m3 __attribute__((aligned(16))); - simde__m128i a_i_p1_m1 __attribute__((aligned(16))); - simde__m128i a_i_p1_p1 __attribute__((aligned(16))); - simde__m128i a_i_p1_p3 __attribute__((aligned(16))); - simde__m128i a_i_p3_m3 __attribute__((aligned(16))); - simde__m128i a_i_p3_m1 __attribute__((aligned(16))); - simde__m128i a_i_p3_p1 __attribute__((aligned(16))); - simde__m128i a_i_p3_p3 __attribute__((aligned(16))); - - simde__m128i psi_a_m3_m3 __attribute__((aligned(16))); - simde__m128i psi_a_m3_m1 __attribute__((aligned(16))); - simde__m128i psi_a_m3_p1 __attribute__((aligned(16))); - simde__m128i psi_a_m3_p3 __attribute__((aligned(16))); - simde__m128i psi_a_m1_m3 __attribute__((aligned(16))); - simde__m128i psi_a_m1_m1 __attribute__((aligned(16))); - simde__m128i psi_a_m1_p1 __attribute__((aligned(16))); - simde__m128i psi_a_m1_p3 __attribute__((aligned(16))); - simde__m128i psi_a_p1_m3 __attribute__((aligned(16))); - simde__m128i psi_a_p1_m1 __attribute__((aligned(16))); - simde__m128i psi_a_p1_p1 __attribute__((aligned(16))); - simde__m128i psi_a_p1_p3 __attribute__((aligned(16))); - simde__m128i psi_a_p3_m3 __attribute__((aligned(16))); - simde__m128i psi_a_p3_m1 __attribute__((aligned(16))); - simde__m128i psi_a_p3_p1 __attribute__((aligned(16))); - simde__m128i psi_a_p3_p3 __attribute__((aligned(16))); - - simde__m128i a_sq_m3_m3 __attribute__((aligned(16))); - simde__m128i a_sq_m3_m1 __attribute__((aligned(16))); - simde__m128i a_sq_m3_p1 __attribute__((aligned(16))); - simde__m128i a_sq_m3_p3 __attribute__((aligned(16))); - simde__m128i a_sq_m1_m3 __attribute__((aligned(16))); - simde__m128i a_sq_m1_m1 __attribute__((aligned(16))); - simde__m128i a_sq_m1_p1 __attribute__((aligned(16))); - simde__m128i a_sq_m1_p3 __attribute__((aligned(16))); - simde__m128i a_sq_p1_m3 __attribute__((aligned(16))); - simde__m128i a_sq_p1_m1 __attribute__((aligned(16))); - simde__m128i a_sq_p1_p1 __attribute__((aligned(16))); - simde__m128i a_sq_p1_p3 __attribute__((aligned(16))); - simde__m128i a_sq_p3_m3 __attribute__((aligned(16))); - simde__m128i a_sq_p3_m1 __attribute__((aligned(16))); - simde__m128i a_sq_p3_p1 __attribute__((aligned(16))); - simde__m128i a_sq_p3_p3 __attribute__((aligned(16))); - - simde__m128i y0_p_1_1 __attribute__((aligned(16))); - simde__m128i y0_p_1_3 __attribute__((aligned(16))); - simde__m128i y0_p_3_1 __attribute__((aligned(16))); - simde__m128i y0_p_3_3 __attribute__((aligned(16))); - simde__m128i y0_m_1_1 __attribute__((aligned(16))); - simde__m128i y0_m_1_3 __attribute__((aligned(16))); - simde__m128i y0_m_3_1 __attribute__((aligned(16))); - simde__m128i y0_m_3_3 __attribute__((aligned(16))); + simde__m128i rho_rs[8] __attribute__((aligned(16))); + simde__m128i psi_rs[16] __attribute__((aligned(16))); + simde__m128i psi_is[16] __attribute__((aligned(16))); + simde__m128i a_rs[16] __attribute__((aligned(16))); + simde__m128i a_is[16] __attribute__((aligned(16))); + simde__m128i psi_as[16] __attribute__((aligned(16))); + simde__m128i a_sqs[16] __attribute__((aligned(16))); + simde__m128i y0_s[8] __attribute__((aligned(16))); simde__m128i y0r __attribute__((aligned(16))); simde__m128i y0i __attribute__((aligned(16))); @@ -1095,96 +984,42 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, rho_rmi = simde_mm_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) // Compute the different rhos - rho_rpi_1_1 = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_10); - rho_rmi_1_1 = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_10); - rho_rpi_3_3 = simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_10); - rho_rmi_3_3 = simde_mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_10); - rho_rpi_3_3 = simde_mm_slli_epi16(rho_rpi_3_3, 1); - rho_rmi_3_3 = simde_mm_slli_epi16(rho_rmi_3_3, 1); + rho_rs[0] = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_10); + rho_rs[4] = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_10); + rho_rs[3] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_10), 1); + rho_rs[7] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_10), 1); xmm4 = simde_mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_10); // Re(rho) xmm5 = simde_mm_mulhi_epi16(xmm3, THREE_OVER_SQRT_10); // Im(rho) xmm5 = simde_mm_slli_epi16(xmm5, 1); - rho_rpi_1_3 = simde_mm_adds_epi16(xmm4, xmm5); - rho_rmi_1_3 = simde_mm_subs_epi16(xmm4, xmm5); + rho_rs[1] = simde_mm_adds_epi16(xmm4, xmm5); + rho_rs[5] = simde_mm_subs_epi16(xmm4, xmm5); xmm6 = simde_mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_10); // Re(rho) xmm7 = simde_mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_10); // Im(rho) xmm6 = simde_mm_slli_epi16(xmm6, 1); - rho_rpi_3_1 = simde_mm_adds_epi16(xmm6, xmm7); - rho_rmi_3_1 = simde_mm_subs_epi16(xmm6, xmm7); + rho_rs[2] = simde_mm_adds_epi16(xmm6, xmm7); + rho_rs[6] = simde_mm_subs_epi16(xmm6, xmm7); // Rearrange interfering MF output simde_mm128_separate_real_imag_parts(&y1r, &y1i, stream1_128i_in[i], stream1_128i_in[i + 1]); - xmm0 = simde_mm_setzero_si128(); // ZERO - xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r - psi_r_p1_p1 = simde_mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r| - - xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1r); - psi_r_p1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1i); - psi_i_p1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1r); - psi_r_p1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1r); - psi_r_p1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1i); - psi_i_p1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1r); - psi_r_p3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1r); - psi_r_p3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1i); - psi_i_p3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1r); - psi_r_p3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1r); - psi_r_p3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1i); - psi_i_p3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1i); - psi_i_m1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1i); - psi_i_m1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1i); - psi_i_m3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1i); - psi_i_m3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1i); - psi_i_p1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1i); - psi_i_p1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1i); - psi_i_p3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1i); - psi_i_p3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1r); - psi_r_m1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1r); - psi_r_m1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1r); - psi_r_m3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1r); - psi_r_m3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1r, rho_rmi_1_1); - psi_r_m1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1r, rho_rmi_1_3); - psi_r_m1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1i, rho_rmi_1_1); - psi_i_m1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1i, rho_rmi_3_1); - psi_i_m1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1r, rho_rmi_3_1); - psi_r_m3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1r, rho_rmi_3_3); - psi_r_m3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1i, rho_rmi_1_3); - psi_i_m3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(y1i, rho_rmi_3_3); - psi_i_m3_m3 = simde_mm_abs_epi16(xmm2); + // | [Re(rho)+ Im(rho)]/sqrt(10) - y1r | + for(int j=0; j<8; j++){ // psi_rs[0~7], rho_rs[0~7] + psi_rs[j] = simde_mm_abs_epi16( simde_mm_subs_epi16(rho_rs[j], y1r) ); + } + for(int j=8; j<16; j++){ // psi_rs[8~16], rho_rs[4,5,6,7,0,1,2,3] + psi_rs[j] = simde_mm_abs_epi16( simde_mm_adds_epi16(rho_rs[(j-4) & 7], y1r) ); + } + const uint8_t rho_rs_indexes[16] = {4,6,5,7,0,2,1,3,0,2,1,3,4,6,5,7}; + for(int k=0; k<16; k+=8){ // psi_is[0~15], sub(rho_rs[4,6,5,7]), add(rho_rs[0,2,1,3]), sub(rho_rs[0,2,1,3]), add(rho_rs[4,6,5,7]) + for(int j=k; j Date: Fri, 8 Sep 2023 11:08:53 +0200 Subject: [PATCH 08/18] Refactor: Make qam64_qam64 more compact Use local arrays and for-loop to replace duplicated statements. For reference, here is the table of index v.s. old local variable qam64 qam64 psi_r_, psi_i_, a_r_, a_i_, psi_a_, a_sq_, bit_met_ 0 p7_p7 16 p3_p7 32 m1_p7 48 m5_p7 1 p7_p5 17 p3_p5 33 m1_p5 49 m5_p5 2 p7_p3 18 p3_p3 34 m1_p3 50 m5_p3 3 p7_p1 19 p3_p1 35 m1_p1 51 m5_p1 4 p7_m1 20 p3_m1 36 m1_m1 52 m5_m1 5 p7_m3 21 p3_m3 37 m1_m3 53 m5_m3 6 p7_m5 22 p3_m5 38 m1_m5 54 m5_m5 7 p7_m7 23 p3_m7 39 m1_m7 55 m5_m7 8 p5_p7 24 p1_p7 40 m3_p7 56 m7_p7 9 p5_p5 25 p1_p5 41 m3_p5 57 m7_p5 10 p5_p3 26 p1_p3 42 m3_p3 58 m7_p3 11 p5_p1 27 p1_p1 43 m3_p1 59 m7_p1 12 p5_m1 28 p1_m1 44 m3_m1 60 m7_m1 13 p5_m3 29 p1_m3 45 m3_m3 61 m7_m3 14 p5_m5 30 p1_m5 46 m3_m5 62 m7_m5 15 p5_m7 31 p1_m7 47 m3_m7 63 m7_m7 y0 0 y0_p_7_7 16 y0_p_3_7 1 y0_p_7_5 17 y0_p_3_5 2 y0_p_7_3 18 y0_p_3_3 3 y0_p_7_1 19 y0_p_3_1 4 y0_m_7_1 20 y0_m_3_1 5 y0_m_7_3 21 y0_m_3_3 6 y0_m_7_5 22 y0_m_3_5 7 y0_m_7_7 23 y0_m_3_7 8 y0_p_5_7 24 y0_p_1_7 9 y0_p_5_5 25 y0_p_1_5 10 y0_p_5_3 26 y0_p_1_3 11 y0_p_5_1 27 y0_p_1_1 12 y0_m_5_1 28 y0_m_1_1 13 y0_m_5_3 29 y0_m_1_3 14 y0_m_5_5 30 y0_m_1_5 15 y0_m_5_7 31 y0_m_1_7 rho_r 0 pi_7_7 16 pi_3_7 1 pi_7_5 17 pi_3_5 2 pi_7_3 18 pi_3_3 3 pi_7_1 19 pi_3_1 4 mi_7_1 20 mi_3_1 5 mi_7_3 21 mi_3_3 6 mi_7_5 22 mi_3_5 7 mi_7_7 23 mi_3_7 8 pi_5_7 24 pi_1_7 9 pi_5_5 25 pi_1_5 10 pi_5_3 26 pi_1_3 11 pi_5_1 27 pi_1_1 12 mi_5_1 28 mi_1_1 13 mi_5_3 29 mi_1_3 14 mi_5_5 30 mi_1_5 15 mi_5_7 31 mi_1_7 --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 5063 +++-------------- 1 file changed, 693 insertions(+), 4370 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 50a2da40fb..ba8904be11 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -1395,11 +1395,11 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, uint32_t length) { #ifdef USE_128BIT - simde__m128i *rho01_256i = (simde__m128i *)rho01; - simde__m128i *stream0_256i_in = (simde__m128i *)stream0_in; - simde__m128i *stream1_256i_in = (simde__m128i *)stream1_in; - simde__m128i *ch_mag_256i = (simde__m128i *)ch_mag; - simde__m128i *ch_mag_256i_i = (simde__m128i *)ch_mag_i; + simde__m128i *rho01_128i = (simde__m128i *)rho01; + simde__m128i *stream0_128i_in = (simde__m128i *)stream0_in; + simde__m128i *stream1_128i_in = (simde__m128i *)stream1_in; + simde__m128i *ch_mag_128i = (simde__m128i *)ch_mag; + simde__m128i *ch_mag_128i_i = (simde__m128i *)ch_mag_i; simde__m128i ONE_OVER_SQRT_42 = simde_mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) simde__m128i THREE_OVER_SQRT_42 = simde_mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) @@ -1447,26 +1447,27 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, for (int i = 0; i < length >> 2; i += 2) { // Get rho - simde__m128i xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; - simde_mm128_separate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i + 1]); + simde__m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; + simde_mm128_separate_real_imag_parts(&xmm2, &xmm3, rho01_128i[i], rho01_128i[i + 1]); simde__m128i rho_rpi = simde_mm_adds_epi16(xmm2, xmm3); // rho = Re(rho) + Im(rho) simde__m128i rho_rmi = simde_mm_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) // Compute the different rhos - simde__m128i rho_rpi_1_1 = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); - simde__m128i rho_rmi_1_1 = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); - simde__m128i rho_rpi_3_3 = simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); - simde__m128i rho_rmi_3_3 = simde_mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); - simde__m128i rho_rpi_5_5 = simde_mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); - simde__m128i rho_rmi_5_5 = simde_mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); - simde__m128i rho_rpi_7_7 = simde_mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); - simde__m128i rho_rmi_7_7 = simde_mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); + simde__m128i rho_rs[32] __attribute__((aligned(16))); + rho_rs[27] = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); + rho_rs[28] = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); + rho_rs[18] = simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); + rho_rs[21] = simde_mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); + rho_rs[9] = simde_mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); + rho_rs[14] = simde_mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); + rho_rs[0] = simde_mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); + rho_rs[7] = simde_mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); - rho_rpi_5_5 = simde_mm_slli_epi16(rho_rpi_5_5, 1); - rho_rmi_5_5 = simde_mm_slli_epi16(rho_rmi_5_5, 1); - rho_rpi_7_7 = simde_mm_slli_epi16(rho_rpi_7_7, 2); - rho_rmi_7_7 = simde_mm_slli_epi16(rho_rmi_7_7, 2); + rho_rs[9] = simde_mm_slli_epi16(rho_rs[9], 1); + rho_rs[14] = simde_mm_slli_epi16(rho_rs[14], 1); + rho_rs[0] = simde_mm_slli_epi16(rho_rs[0], 2); + rho_rs[7] = simde_mm_slli_epi16(rho_rs[7], 2); xmm4 = simde_mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_42); xmm5 = simde_mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_42); @@ -1476,318 +1477,80 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, xmm7 = simde_mm_slli_epi16(xmm7, 1); xmm8 = simde_mm_slli_epi16(xmm8, 2); - simde__m128i rho_rpi_1_3 = simde_mm_adds_epi16(xmm4, xmm6); - simde__m128i rho_rmi_1_3 = simde_mm_subs_epi16(xmm4, xmm6); - simde__m128i rho_rpi_1_5 = simde_mm_adds_epi16(xmm4, xmm7); - simde__m128i rho_rmi_1_5 = simde_mm_subs_epi16(xmm4, xmm7); - simde__m128i rho_rpi_1_7 = simde_mm_adds_epi16(xmm4, xmm8); - simde__m128i rho_rmi_1_7 = simde_mm_subs_epi16(xmm4, xmm8); + rho_rs[26] = simde_mm_adds_epi16(xmm4, xmm6); + rho_rs[29] = simde_mm_subs_epi16(xmm4, xmm6); + rho_rs[25] = simde_mm_adds_epi16(xmm4, xmm7); + rho_rs[30] = simde_mm_subs_epi16(xmm4, xmm7); + rho_rs[24] = simde_mm_adds_epi16(xmm4, xmm8); + rho_rs[31] = simde_mm_subs_epi16(xmm4, xmm8); xmm4 = simde_mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_42); - simde__m128i rho_rpi_3_1 = simde_mm_adds_epi16(xmm4, xmm5); - simde__m128i rho_rmi_3_1 = simde_mm_subs_epi16(xmm4, xmm5); - simde__m128i rho_rpi_3_5 = simde_mm_adds_epi16(xmm4, xmm7); - simde__m128i rho_rmi_3_5 = simde_mm_subs_epi16(xmm4, xmm7); - simde__m128i rho_rpi_3_7 = simde_mm_adds_epi16(xmm4, xmm8); - simde__m128i rho_rmi_3_7 = simde_mm_subs_epi16(xmm4, xmm8); + rho_rs[19] = simde_mm_adds_epi16(xmm4, xmm5); + rho_rs[20] = simde_mm_subs_epi16(xmm4, xmm5); + rho_rs[17] = simde_mm_adds_epi16(xmm4, xmm7); + rho_rs[22] = simde_mm_subs_epi16(xmm4, xmm7); + rho_rs[16] = simde_mm_adds_epi16(xmm4, xmm8); + rho_rs[23] = simde_mm_subs_epi16(xmm4, xmm8); xmm4 = simde_mm_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42); xmm4 = simde_mm_slli_epi16(xmm4, 1); - simde__m128i rho_rpi_5_1 = simde_mm_adds_epi16(xmm4, xmm5); - simde__m128i rho_rmi_5_1 = simde_mm_subs_epi16(xmm4, xmm5); - simde__m128i rho_rpi_5_3 = simde_mm_adds_epi16(xmm4, xmm6); - simde__m128i rho_rmi_5_3 = simde_mm_subs_epi16(xmm4, xmm6); - simde__m128i rho_rpi_5_7 = simde_mm_adds_epi16(xmm4, xmm8); - simde__m128i rho_rmi_5_7 = simde_mm_subs_epi16(xmm4, xmm8); + rho_rs[11] = simde_mm_adds_epi16(xmm4, xmm5); + rho_rs[12] = simde_mm_subs_epi16(xmm4, xmm5); + rho_rs[10] = simde_mm_adds_epi16(xmm4, xmm6); + rho_rs[13] = simde_mm_subs_epi16(xmm4, xmm6); + rho_rs[8] = simde_mm_adds_epi16(xmm4, xmm8); + rho_rs[15] = simde_mm_subs_epi16(xmm4, xmm8); xmm4 = simde_mm_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42); xmm4 = simde_mm_slli_epi16(xmm4, 2); - simde__m128i rho_rpi_7_1 = simde_mm_adds_epi16(xmm4, xmm5); - simde__m128i rho_rmi_7_1 = simde_mm_subs_epi16(xmm4, xmm5); - simde__m128i rho_rpi_7_3 = simde_mm_adds_epi16(xmm4, xmm6); - simde__m128i rho_rmi_7_3 = simde_mm_subs_epi16(xmm4, xmm6); - simde__m128i rho_rpi_7_5 = simde_mm_adds_epi16(xmm4, xmm7); - simde__m128i rho_rmi_7_5 = simde_mm_subs_epi16(xmm4, xmm7); + rho_rs[3] = simde_mm_adds_epi16(xmm4, xmm5); + rho_rs[4] = simde_mm_subs_epi16(xmm4, xmm5); + rho_rs[2] = simde_mm_adds_epi16(xmm4, xmm6); + rho_rs[5] = simde_mm_subs_epi16(xmm4, xmm6); + rho_rs[1] = simde_mm_adds_epi16(xmm4, xmm7); + rho_rs[6] = simde_mm_subs_epi16(xmm4, xmm7); // Rearrange interfering MF output - simde__m128i y1r, y1i, xmm0; - simde_mm128_separate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i + 1]); + simde__m128i y1r, y1i; + simde_mm128_separate_real_imag_parts(&y1r, &y1i, stream1_128i_in[i], stream1_128i_in[i + 1]); // Psi_r calculation from rho_rpi or rho_rmi xmm0 = simde_mm_set1_epi16(0); // ZERO for abs_pi16 - xmm2 = simde_mm_subs_epi16(rho_rpi_7_7, y1r); + xmm2 = simde_mm_subs_epi16(rho_rs[0], y1r); - simde__m128i psi_r_p7_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_5, y1r); - simde__m128i psi_r_p7_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_3, y1r); - simde__m128i psi_r_p7_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_1, y1r); - simde__m128i psi_r_p7_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_1, y1r); - simde__m128i psi_r_p7_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_3, y1r); - simde__m128i psi_r_p7_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_5, y1r); - simde__m128i psi_r_p7_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_7, y1r); - simde__m128i psi_r_p7_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_7, y1r); - simde__m128i psi_r_p5_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_5, y1r); - simde__m128i psi_r_p5_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_3, y1r); - simde__m128i psi_r_p5_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_1, y1r); - simde__m128i psi_r_p5_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_1, y1r); - simde__m128i psi_r_p5_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_3, y1r); - simde__m128i psi_r_p5_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_5, y1r); - simde__m128i psi_r_p5_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_7, y1r); - simde__m128i psi_r_p5_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_7, y1r); - simde__m128i psi_r_p3_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_5, y1r); - simde__m128i psi_r_p3_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1r); - simde__m128i psi_r_p3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1r); - simde__m128i psi_r_p3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1r); - simde__m128i psi_r_p3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1r); - simde__m128i psi_r_p3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_5, y1r); - simde__m128i psi_r_p3_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_7, y1r); - simde__m128i psi_r_p3_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_7, y1r); - simde__m128i psi_r_p1_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_5, y1r); - simde__m128i psi_r_p1_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1r); - simde__m128i psi_r_p1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1r); - simde__m128i psi_r_p1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1r); - simde__m128i psi_r_p1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1r); - simde__m128i psi_r_p1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_5, y1r); - simde__m128i psi_r_p1_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_7, y1r); - simde__m128i psi_r_p1_m7 = simde_mm_abs_epi16(xmm2); + simde__m128i psi_r_s[64] __attribute__((aligned(16))); + for(int j=0; j<32; j++) // psi_r_s[0~31], rho_rs[0~31] + psi_r_s[j] = simde_mm_abs_epi16(simde_mm_subs_epi16(rho_rs[j], y1r)); + for(int j=32; j<64; j++) // psi_r_s[32~64], rho_rs[31~0] + psi_r_s[j] = simde_mm_abs_epi16(simde_mm_adds_epi16(rho_rs[63 - j], y1r)); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_7, y1r); - simde__m128i psi_r_m1_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_5, y1r); - simde__m128i psi_r_m1_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_3, y1r); - simde__m128i psi_r_m1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_1, y1r); - simde__m128i psi_r_m1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1r); - simde__m128i psi_r_m1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1r); - simde__m128i psi_r_m1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_5, y1r); - simde__m128i psi_r_m1_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_7, y1r); - simde__m128i psi_r_m1_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_7, y1r); - simde__m128i psi_r_m3_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_5, y1r); - simde__m128i psi_r_m3_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_3, y1r); - simde__m128i psi_r_m3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_1, y1r); - simde__m128i psi_r_m3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1r); - simde__m128i psi_r_m3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1r); - simde__m128i psi_r_m3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_5, y1r); - simde__m128i psi_r_m3_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_7, y1r); - simde__m128i psi_r_m3_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_7, y1r); - simde__m128i psi_r_m5_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_5, y1r); - simde__m128i psi_r_m5_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_3, y1r); - simde__m128i psi_r_m5_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_1, y1r); - simde__m128i psi_r_m5_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_1, y1r); - simde__m128i psi_r_m5_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_3, y1r); - simde__m128i psi_r_m5_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_5, y1r); - simde__m128i psi_r_m5_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_7, y1r); - simde__m128i psi_r_m5_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_7, y1r); - simde__m128i psi_r_m7_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_5, y1r); - simde__m128i psi_r_m7_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_3, y1r); - simde__m128i psi_r_m7_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_1, y1r); - simde__m128i psi_r_m7_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_1, y1r); - simde__m128i psi_r_m7_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_3, y1r); - simde__m128i psi_r_m7_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_5, y1r); - simde__m128i psi_r_m7_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_7, y1r); - simde__m128i psi_r_m7_m7 = simde_mm_abs_epi16(xmm2); - - // simde__m128i Psi_i calculation from rho_rpi or rho_rmi - xmm2 = simde_mm_subs_epi16(rho_rmi_7_7, y1i); - simde__m128i psi_i_p7_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_7, y1i); - simde__m128i psi_i_p7_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_7, y1i); - simde__m128i psi_i_p7_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_7, y1i); - simde__m128i psi_i_p7_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_7, y1i); - simde__m128i psi_i_p7_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_7, y1i); - simde__m128i psi_i_p7_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_7, y1i); - simde__m128i psi_i_p7_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_7, y1i); - simde__m128i psi_i_p7_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_5, y1i); - simde__m128i psi_i_p5_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_5, y1i); - simde__m128i psi_i_p5_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_5, y1i); - simde__m128i psi_i_p5_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_5, y1i); - simde__m128i psi_i_p5_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_5, y1i); - simde__m128i psi_i_p5_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_5, y1i); - simde__m128i psi_i_p5_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_5, y1i); - simde__m128i psi_i_p5_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_5, y1i); - simde__m128i psi_i_p5_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_3, y1i); - simde__m128i psi_i_p3_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_3, y1i); - simde__m128i psi_i_p3_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_3, y1i); - simde__m128i psi_i_p3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_3, y1i); - simde__m128i psi_i_p3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_3, y1i); - simde__m128i psi_i_p3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_3, y1i); - simde__m128i psi_i_p3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_3, y1i); - simde__m128i psi_i_p3_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_3, y1i); - simde__m128i psi_i_p3_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_7_1, y1i); - simde__m128i psi_i_p1_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_5_1, y1i); - simde__m128i psi_i_p1_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_3_1, y1i); - simde__m128i psi_i_p1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rmi_1_1, y1i); - simde__m128i psi_i_p1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_1_1, y1i); - simde__m128i psi_i_p1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_3_1, y1i); - simde__m128i psi_i_p1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_5_1, y1i); - simde__m128i psi_i_p1_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rpi_7_1, y1i); - simde__m128i psi_i_p1_m7 = simde_mm_abs_epi16(xmm2); - - xmm2 = simde_mm_subs_epi16(rho_rpi_7_1, y1i); - simde__m128i psi_i_m1_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_1, y1i); - simde__m128i psi_i_m1_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_1, y1i); - simde__m128i psi_i_m1_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_1, y1i); - simde__m128i psi_i_m1_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_1, y1i); - simde__m128i psi_i_m1_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_1, y1i); - simde__m128i psi_i_m1_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_1, y1i); - simde__m128i psi_i_m1_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_1, y1i); - simde__m128i psi_i_m1_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_3, y1i); - simde__m128i psi_i_m3_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_3, y1i); - simde__m128i psi_i_m3_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_3, y1i); - simde__m128i psi_i_m3_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_3, y1i); - simde__m128i psi_i_m3_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_3, y1i); - simde__m128i psi_i_m3_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_3, y1i); - simde__m128i psi_i_m3_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_3, y1i); - simde__m128i psi_i_m3_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_3, y1i); - simde__m128i psi_i_m3_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_5, y1i); - simde__m128i psi_i_m5_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_5, y1i); - simde__m128i psi_i_m5_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_5, y1i); - simde__m128i psi_i_m5_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_5, y1i); - simde__m128i psi_i_m5_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_5, y1i); - simde__m128i psi_i_m5_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_5, y1i); - simde__m128i psi_i_m5_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_5, y1i); - simde__m128i psi_i_m5_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_5, y1i); - simde__m128i psi_i_m5_m7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_7_7, y1i); - simde__m128i psi_i_m7_p7 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_5_7, y1i); - simde__m128i psi_i_m7_p5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_3_7, y1i); - simde__m128i psi_i_m7_p3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_subs_epi16(rho_rpi_1_7, y1i); - simde__m128i psi_i_m7_p1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_1_7, y1i); - simde__m128i psi_i_m7_m1 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_3_7, y1i); - simde__m128i psi_i_m7_m3 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_5_7, y1i); - simde__m128i psi_i_m7_m5 = simde_mm_abs_epi16(xmm2); - xmm2 = simde_mm_adds_epi16(rho_rmi_7_7, y1i); - simde__m128i psi_i_m7_m7 = simde_mm_abs_epi16(xmm2); + // simde__m128i psi_i calculation from rho_rpi or rho_rmi + simde__m128i psi_i_s[64] __attribute__((aligned(16))); + const uint8_t rho_rs_index[32] = {7,15,23,31,24,16,8,0,6,14,22,30,25,17,9,1,5,13,21,29,26,18,10,2,4,12,20,28,27,19,11,3}; + for(int k=0; k<32; k+=8){ // psi_i_s[0~31] + for(int j=k; j>3], y0i_seven_over_sqrt_21); + y0_s[j+1] = simde_mm_adds_epi16(y0r_over_s[j>>3], y0i_five_over_sqrt_21); + y0_s[j+2] = simde_mm_adds_epi16(y0r_over_s[j>>3], y0i_three_over_sqrt_21); + y0_s[j+3] = simde_mm_adds_epi16(y0r_over_s[j>>3], y0i_one_over_sqrt_21); + y0_s[j+4] = simde_mm_subs_epi16(y0r_over_s[j>>3], y0i_one_over_sqrt_21); + y0_s[j+5] = simde_mm_subs_epi16(y0r_over_s[j>>3], y0i_three_over_sqrt_21); + y0_s[j+6] = simde_mm_subs_epi16(y0r_over_s[j>>3], y0i_five_over_sqrt_21); + y0_s[j+7] = simde_mm_subs_epi16(y0r_over_s[j>>3], y0i_seven_over_sqrt_21); + } - simde__m128i y0_m_1_1 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m128i y0_m_1_3 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m128i y0_m_1_5 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m128i y0_m_1_7 = simde_mm_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m128i y0_m_3_1 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m128i y0_m_3_3 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m128i y0_m_3_5 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m128i y0_m_3_7 = simde_mm_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m128i y0_m_5_1 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m128i y0_m_5_3 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m128i y0_m_5_5 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m128i y0_m_5_7 = simde_mm_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m128i y0_m_7_1 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m128i y0_m_7_3 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m128i y0_m_7_5 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m128i y0_m_7_7 = simde_mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - - // Detection of interference term ch_mag_int_with_sigma2 = simde_mm_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m128i a_r_p7_p7 = interference_abs_64qam_epi16(psi_r_p7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_p5 = interference_abs_64qam_epi16(psi_r_p7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_p3 = interference_abs_64qam_epi16(psi_r_p7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_p1 = interference_abs_64qam_epi16(psi_r_p7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_m1 = interference_abs_64qam_epi16(psi_r_p7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_m3 = interference_abs_64qam_epi16(psi_r_p7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_m5 = interference_abs_64qam_epi16(psi_r_p7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p7_m7 = interference_abs_64qam_epi16(psi_r_p7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_p7 = interference_abs_64qam_epi16(psi_r_p5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_p5 = interference_abs_64qam_epi16(psi_r_p5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_p3 = interference_abs_64qam_epi16(psi_r_p5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_p1 = interference_abs_64qam_epi16(psi_r_p5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_m1 = interference_abs_64qam_epi16(psi_r_p5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_m3 = interference_abs_64qam_epi16(psi_r_p5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_m5 = interference_abs_64qam_epi16(psi_r_p5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p5_m7 = interference_abs_64qam_epi16(psi_r_p5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_p7 = interference_abs_64qam_epi16(psi_r_p3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_p5 = interference_abs_64qam_epi16(psi_r_p3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_p3 = interference_abs_64qam_epi16(psi_r_p3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_p1 = interference_abs_64qam_epi16(psi_r_p3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_m1 = interference_abs_64qam_epi16(psi_r_p3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_m3 = interference_abs_64qam_epi16(psi_r_p3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_m5 = interference_abs_64qam_epi16(psi_r_p3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p3_m7 = interference_abs_64qam_epi16(psi_r_p3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_p7 = interference_abs_64qam_epi16(psi_r_p1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_p5 = interference_abs_64qam_epi16(psi_r_p1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_p3 = interference_abs_64qam_epi16(psi_r_p1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_p1 = interference_abs_64qam_epi16(psi_r_p1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_m1 = interference_abs_64qam_epi16(psi_r_p1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_m3 = interference_abs_64qam_epi16(psi_r_p1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_m5 = interference_abs_64qam_epi16(psi_r_p1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_p1_m7 = interference_abs_64qam_epi16(psi_r_p1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_p7 = interference_abs_64qam_epi16(psi_r_m1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_p5 = interference_abs_64qam_epi16(psi_r_m1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_p3 = interference_abs_64qam_epi16(psi_r_m1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_p1 = interference_abs_64qam_epi16(psi_r_m1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_m1 = interference_abs_64qam_epi16(psi_r_m1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_m3 = interference_abs_64qam_epi16(psi_r_m1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_m5 = interference_abs_64qam_epi16(psi_r_m1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m1_m7 = interference_abs_64qam_epi16(psi_r_m1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_p7 = interference_abs_64qam_epi16(psi_r_m3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_p5 = interference_abs_64qam_epi16(psi_r_m3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_p3 = interference_abs_64qam_epi16(psi_r_m3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_p1 = interference_abs_64qam_epi16(psi_r_m3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_m1 = interference_abs_64qam_epi16(psi_r_m3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_m3 = interference_abs_64qam_epi16(psi_r_m3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_m5 = interference_abs_64qam_epi16(psi_r_m3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m3_m7 = interference_abs_64qam_epi16(psi_r_m3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_p7 = interference_abs_64qam_epi16(psi_r_m5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_p5 = interference_abs_64qam_epi16(psi_r_m5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_p3 = interference_abs_64qam_epi16(psi_r_m5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_p1 = interference_abs_64qam_epi16(psi_r_m5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_m1 = interference_abs_64qam_epi16(psi_r_m5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_m3 = interference_abs_64qam_epi16(psi_r_m5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_m5 = interference_abs_64qam_epi16(psi_r_m5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m5_m7 = interference_abs_64qam_epi16(psi_r_m5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_p7 = interference_abs_64qam_epi16(psi_r_m7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_p5 = interference_abs_64qam_epi16(psi_r_m7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_p3 = interference_abs_64qam_epi16(psi_r_m7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_p1 = interference_abs_64qam_epi16(psi_r_m7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_m1 = interference_abs_64qam_epi16(psi_r_m7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_m3 = interference_abs_64qam_epi16(psi_r_m7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_m5 = interference_abs_64qam_epi16(psi_r_m7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_r_m7_m7 = interference_abs_64qam_epi16(psi_r_m7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); + simde__m128i a_r_s[64] __attribute__((aligned(16))); + simde__m128i a_i_s[64] __attribute__((aligned(16))); + simde__m128i psi_a_s[64] __attribute__((aligned(16))); + simde__m128i a_sq_s[64] __attribute__((aligned(16))); + for(int j=0; j<64; j++){ + // Detection of interference term + a_r_s[j] = interference_abs_64qam_epi16(psi_r_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); + a_i_s[j] = interference_abs_64qam_epi16(psi_i_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); + + // Calculation of a group of two terms in the bit metric involving product of psi and interference + psi_a_s[j] = prodsum_psi_a_epi16(psi_r_s[j], a_r_s[j], psi_i_s[j], a_i_s[j]); - simde__m128i a_i_p7_p7 = interference_abs_64qam_epi16(psi_i_p7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_p5 = interference_abs_64qam_epi16(psi_i_p7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_p3 = interference_abs_64qam_epi16(psi_i_p7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_p1 = interference_abs_64qam_epi16(psi_i_p7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_m1 = interference_abs_64qam_epi16(psi_i_p7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_m3 = interference_abs_64qam_epi16(psi_i_p7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_m5 = interference_abs_64qam_epi16(psi_i_p7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p7_m7 = interference_abs_64qam_epi16(psi_i_p7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_p7 = interference_abs_64qam_epi16(psi_i_p5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_p5 = interference_abs_64qam_epi16(psi_i_p5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_p3 = interference_abs_64qam_epi16(psi_i_p5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_p1 = interference_abs_64qam_epi16(psi_i_p5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_m1 = interference_abs_64qam_epi16(psi_i_p5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_m3 = interference_abs_64qam_epi16(psi_i_p5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_m5 = interference_abs_64qam_epi16(psi_i_p5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p5_m7 = interference_abs_64qam_epi16(psi_i_p5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_p7 = interference_abs_64qam_epi16(psi_i_p3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_p5 = interference_abs_64qam_epi16(psi_i_p3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_p3 = interference_abs_64qam_epi16(psi_i_p3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_p1 = interference_abs_64qam_epi16(psi_i_p3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_m1 = interference_abs_64qam_epi16(psi_i_p3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_m3 = interference_abs_64qam_epi16(psi_i_p3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_m5 = interference_abs_64qam_epi16(psi_i_p3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p3_m7 = interference_abs_64qam_epi16(psi_i_p3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_p7 = interference_abs_64qam_epi16(psi_i_p1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_p5 = interference_abs_64qam_epi16(psi_i_p1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_p3 = interference_abs_64qam_epi16(psi_i_p1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_p1 = interference_abs_64qam_epi16(psi_i_p1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_m1 = interference_abs_64qam_epi16(psi_i_p1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_m3 = interference_abs_64qam_epi16(psi_i_p1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_m5 = interference_abs_64qam_epi16(psi_i_p1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_p1_m7 = interference_abs_64qam_epi16(psi_i_p1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_p7 = interference_abs_64qam_epi16(psi_i_m1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_p5 = interference_abs_64qam_epi16(psi_i_m1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_p3 = interference_abs_64qam_epi16(psi_i_m1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_p1 = interference_abs_64qam_epi16(psi_i_m1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_m1 = interference_abs_64qam_epi16(psi_i_m1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_m3 = interference_abs_64qam_epi16(psi_i_m1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_m5 = interference_abs_64qam_epi16(psi_i_m1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m1_m7 = interference_abs_64qam_epi16(psi_i_m1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_p7 = interference_abs_64qam_epi16(psi_i_m3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_p5 = interference_abs_64qam_epi16(psi_i_m3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_p3 = interference_abs_64qam_epi16(psi_i_m3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_p1 = interference_abs_64qam_epi16(psi_i_m3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_m1 = interference_abs_64qam_epi16(psi_i_m3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_m3 = interference_abs_64qam_epi16(psi_i_m3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_m5 = interference_abs_64qam_epi16(psi_i_m3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m3_m7 = interference_abs_64qam_epi16(psi_i_m3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_p7 = interference_abs_64qam_epi16(psi_i_m5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_p5 = interference_abs_64qam_epi16(psi_i_m5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_p3 = interference_abs_64qam_epi16(psi_i_m5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_p1 = interference_abs_64qam_epi16(psi_i_m5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_m1 = interference_abs_64qam_epi16(psi_i_m5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_m3 = interference_abs_64qam_epi16(psi_i_m5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_m5 = interference_abs_64qam_epi16(psi_i_m5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m5_m7 = interference_abs_64qam_epi16(psi_i_m5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_p7 = interference_abs_64qam_epi16(psi_i_m7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_p5 = interference_abs_64qam_epi16(psi_i_m7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_p3 = interference_abs_64qam_epi16(psi_i_m7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_p1 = interference_abs_64qam_epi16(psi_i_m7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_m1 = interference_abs_64qam_epi16(psi_i_m7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_m3 = interference_abs_64qam_epi16(psi_i_m7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_m5 = interference_abs_64qam_epi16(psi_i_m7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m128i a_i_m7_m7 = interference_abs_64qam_epi16(psi_i_m7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); + // Multiply by sqrt(2) + psi_a_s[j] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(psi_a_s[j], ONE_OVER_SQRT_2), 2); - // Calculation of a group of two terms in the bit metric involving product of psi and interference - simde__m128i psi_a_p7_p7 = prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7); - simde__m128i psi_a_p7_p5 = prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5); - simde__m128i psi_a_p7_p3 = prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3); - simde__m128i psi_a_p7_p1 = prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1); - simde__m128i psi_a_p7_m1 = prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1); - simde__m128i psi_a_p7_m3 = prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3); - simde__m128i psi_a_p7_m5 = prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5); - simde__m128i psi_a_p7_m7 = prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7); - simde__m128i psi_a_p5_p7 = prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7); - simde__m128i psi_a_p5_p5 = prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5); - simde__m128i psi_a_p5_p3 = prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3); - simde__m128i psi_a_p5_p1 = prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1); - simde__m128i psi_a_p5_m1 = prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1); - simde__m128i psi_a_p5_m3 = prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3); - simde__m128i psi_a_p5_m5 = prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5); - simde__m128i psi_a_p5_m7 = prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7); - simde__m128i psi_a_p3_p7 = prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7); - simde__m128i psi_a_p3_p5 = prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5); - simde__m128i psi_a_p3_p3 = prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); - simde__m128i psi_a_p3_p1 = prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); - simde__m128i psi_a_p3_m1 = prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); - simde__m128i psi_a_p3_m3 = prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); - simde__m128i psi_a_p3_m5 = prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5); - simde__m128i psi_a_p3_m7 = prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7); - simde__m128i psi_a_p1_p7 = prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7); - simde__m128i psi_a_p1_p5 = prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5); - simde__m128i psi_a_p1_p3 = prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); - simde__m128i psi_a_p1_p1 = prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); - simde__m128i psi_a_p1_m1 = prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); - simde__m128i psi_a_p1_m3 = prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); - simde__m128i psi_a_p1_m5 = prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5); - simde__m128i psi_a_p1_m7 = prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7); - simde__m128i psi_a_m1_p7 = prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7); - simde__m128i psi_a_m1_p5 = prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5); - simde__m128i psi_a_m1_p3 = prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); - simde__m128i psi_a_m1_p1 = prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); - simde__m128i psi_a_m1_m1 = prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); - simde__m128i psi_a_m1_m3 = prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); - simde__m128i psi_a_m1_m5 = prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5); - simde__m128i psi_a_m1_m7 = prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7); - simde__m128i psi_a_m3_p7 = prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7); - simde__m128i psi_a_m3_p5 = prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5); - simde__m128i psi_a_m3_p3 = prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); - simde__m128i psi_a_m3_p1 = prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); - simde__m128i psi_a_m3_m1 = prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); - simde__m128i psi_a_m3_m3 = prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); - simde__m128i psi_a_m3_m5 = prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5); - simde__m128i psi_a_m3_m7 = prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7); - simde__m128i psi_a_m5_p7 = prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7); - simde__m128i psi_a_m5_p5 = prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5); - simde__m128i psi_a_m5_p3 = prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3); - simde__m128i psi_a_m5_p1 = prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1); - simde__m128i psi_a_m5_m1 = prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1); - simde__m128i psi_a_m5_m3 = prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3); - simde__m128i psi_a_m5_m5 = prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5); - simde__m128i psi_a_m5_m7 = prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7); - simde__m128i psi_a_m7_p7 = prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7); - simde__m128i psi_a_m7_p5 = prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5); - simde__m128i psi_a_m7_p3 = prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3); - simde__m128i psi_a_m7_p1 = prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1); - simde__m128i psi_a_m7_m1 = prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1); - simde__m128i psi_a_m7_m3 = prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3); - simde__m128i psi_a_m7_m5 = prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5); - simde__m128i psi_a_m7_m7 = prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7); - - // Multiply by sqrt(2) - psi_a_p7_p7 = simde_mm_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); - psi_a_p7_p7 = simde_mm_slli_epi16(psi_a_p7_p7, 2); - psi_a_p7_p5 = simde_mm_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2); - psi_a_p7_p5 = simde_mm_slli_epi16(psi_a_p7_p5, 2); - psi_a_p7_p3 = simde_mm_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2); - psi_a_p7_p3 = simde_mm_slli_epi16(psi_a_p7_p3, 2); - psi_a_p7_p1 = simde_mm_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2); - psi_a_p7_p1 = simde_mm_slli_epi16(psi_a_p7_p1, 2); - psi_a_p7_m1 = simde_mm_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2); - psi_a_p7_m1 = simde_mm_slli_epi16(psi_a_p7_m1, 2); - psi_a_p7_m3 = simde_mm_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2); - psi_a_p7_m3 = simde_mm_slli_epi16(psi_a_p7_m3, 2); - psi_a_p7_m5 = simde_mm_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2); - psi_a_p7_m5 = simde_mm_slli_epi16(psi_a_p7_m5, 2); - psi_a_p7_m7 = simde_mm_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2); - psi_a_p7_m7 = simde_mm_slli_epi16(psi_a_p7_m7, 2); - psi_a_p5_p7 = simde_mm_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2); - psi_a_p5_p7 = simde_mm_slli_epi16(psi_a_p5_p7, 2); - psi_a_p5_p5 = simde_mm_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2); - psi_a_p5_p5 = simde_mm_slli_epi16(psi_a_p5_p5, 2); - psi_a_p5_p3 = simde_mm_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2); - psi_a_p5_p3 = simde_mm_slli_epi16(psi_a_p5_p3, 2); - psi_a_p5_p1 = simde_mm_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2); - psi_a_p5_p1 = simde_mm_slli_epi16(psi_a_p5_p1, 2); - psi_a_p5_m1 = simde_mm_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2); - psi_a_p5_m1 = simde_mm_slli_epi16(psi_a_p5_m1, 2); - psi_a_p5_m3 = simde_mm_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2); - psi_a_p5_m3 = simde_mm_slli_epi16(psi_a_p5_m3, 2); - psi_a_p5_m5 = simde_mm_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2); - psi_a_p5_m5 = simde_mm_slli_epi16(psi_a_p5_m5, 2); - psi_a_p5_m7 = simde_mm_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2); - psi_a_p5_m7 = simde_mm_slli_epi16(psi_a_p5_m7, 2); - psi_a_p3_p7 = simde_mm_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2); - psi_a_p3_p7 = simde_mm_slli_epi16(psi_a_p3_p7, 2); - psi_a_p3_p5 = simde_mm_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2); - psi_a_p3_p5 = simde_mm_slli_epi16(psi_a_p3_p5, 2); - psi_a_p3_p3 = simde_mm_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2); - psi_a_p3_p3 = simde_mm_slli_epi16(psi_a_p3_p3, 2); - psi_a_p3_p1 = simde_mm_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2); - psi_a_p3_p1 = simde_mm_slli_epi16(psi_a_p3_p1, 2); - psi_a_p3_m1 = simde_mm_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2); - psi_a_p3_m1 = simde_mm_slli_epi16(psi_a_p3_m1, 2); - psi_a_p3_m3 = simde_mm_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2); - psi_a_p3_m3 = simde_mm_slli_epi16(psi_a_p3_m3, 2); - psi_a_p3_m5 = simde_mm_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2); - psi_a_p3_m5 = simde_mm_slli_epi16(psi_a_p3_m5, 2); - psi_a_p3_m7 = simde_mm_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2); - psi_a_p3_m7 = simde_mm_slli_epi16(psi_a_p3_m7, 2); - psi_a_p1_p7 = simde_mm_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2); - psi_a_p1_p7 = simde_mm_slli_epi16(psi_a_p1_p7, 2); - psi_a_p1_p5 = simde_mm_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2); - psi_a_p1_p5 = simde_mm_slli_epi16(psi_a_p1_p5, 2); - psi_a_p1_p3 = simde_mm_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2); - psi_a_p1_p3 = simde_mm_slli_epi16(psi_a_p1_p3, 2); - psi_a_p1_p1 = simde_mm_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2); - psi_a_p1_p1 = simde_mm_slli_epi16(psi_a_p1_p1, 2); - psi_a_p1_m1 = simde_mm_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2); - psi_a_p1_m1 = simde_mm_slli_epi16(psi_a_p1_m1, 2); - psi_a_p1_m3 = simde_mm_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2); - psi_a_p1_m3 = simde_mm_slli_epi16(psi_a_p1_m3, 2); - psi_a_p1_m5 = simde_mm_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2); - psi_a_p1_m5 = simde_mm_slli_epi16(psi_a_p1_m5, 2); - psi_a_p1_m7 = simde_mm_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2); - psi_a_p1_m7 = simde_mm_slli_epi16(psi_a_p1_m7, 2); - psi_a_m1_p7 = simde_mm_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2); - psi_a_m1_p7 = simde_mm_slli_epi16(psi_a_m1_p7, 2); - psi_a_m1_p5 = simde_mm_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2); - psi_a_m1_p5 = simde_mm_slli_epi16(psi_a_m1_p5, 2); - psi_a_m1_p3 = simde_mm_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2); - psi_a_m1_p3 = simde_mm_slli_epi16(psi_a_m1_p3, 2); - psi_a_m1_p1 = simde_mm_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2); - psi_a_m1_p1 = simde_mm_slli_epi16(psi_a_m1_p1, 2); - psi_a_m1_m1 = simde_mm_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2); - psi_a_m1_m1 = simde_mm_slli_epi16(psi_a_m1_m1, 2); - psi_a_m1_m3 = simde_mm_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2); - psi_a_m1_m3 = simde_mm_slli_epi16(psi_a_m1_m3, 2); - psi_a_m1_m5 = simde_mm_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2); - psi_a_m1_m5 = simde_mm_slli_epi16(psi_a_m1_m5, 2); - psi_a_m1_m7 = simde_mm_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2); - psi_a_m1_m7 = simde_mm_slli_epi16(psi_a_m1_m7, 2); - psi_a_m3_p7 = simde_mm_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2); - psi_a_m3_p7 = simde_mm_slli_epi16(psi_a_m3_p7, 2); - psi_a_m3_p5 = simde_mm_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2); - psi_a_m3_p5 = simde_mm_slli_epi16(psi_a_m3_p5, 2); - psi_a_m3_p3 = simde_mm_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2); - psi_a_m3_p3 = simde_mm_slli_epi16(psi_a_m3_p3, 2); - psi_a_m3_p1 = simde_mm_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2); - psi_a_m3_p1 = simde_mm_slli_epi16(psi_a_m3_p1, 2); - psi_a_m3_m1 = simde_mm_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2); - psi_a_m3_m1 = simde_mm_slli_epi16(psi_a_m3_m1, 2); - psi_a_m3_m3 = simde_mm_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2); - psi_a_m3_m3 = simde_mm_slli_epi16(psi_a_m3_m3, 2); - psi_a_m3_m5 = simde_mm_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2); - psi_a_m3_m5 = simde_mm_slli_epi16(psi_a_m3_m5, 2); - psi_a_m3_m7 = simde_mm_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2); - psi_a_m3_m7 = simde_mm_slli_epi16(psi_a_m3_m7, 2); - psi_a_m5_p7 = simde_mm_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2); - psi_a_m5_p7 = simde_mm_slli_epi16(psi_a_m5_p7, 2); - psi_a_m5_p5 = simde_mm_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2); - psi_a_m5_p5 = simde_mm_slli_epi16(psi_a_m5_p5, 2); - psi_a_m5_p3 = simde_mm_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2); - psi_a_m5_p3 = simde_mm_slli_epi16(psi_a_m5_p3, 2); - psi_a_m5_p1 = simde_mm_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2); - psi_a_m5_p1 = simde_mm_slli_epi16(psi_a_m5_p1, 2); - psi_a_m5_m1 = simde_mm_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2); - psi_a_m5_m1 = simde_mm_slli_epi16(psi_a_m5_m1, 2); - psi_a_m5_m3 = simde_mm_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2); - psi_a_m5_m3 = simde_mm_slli_epi16(psi_a_m5_m3, 2); - psi_a_m5_m5 = simde_mm_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2); - psi_a_m5_m5 = simde_mm_slli_epi16(psi_a_m5_m5, 2); - psi_a_m5_m7 = simde_mm_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2); - psi_a_m5_m7 = simde_mm_slli_epi16(psi_a_m5_m7, 2); - psi_a_m7_p7 = simde_mm_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2); - psi_a_m7_p7 = simde_mm_slli_epi16(psi_a_m7_p7, 2); - psi_a_m7_p5 = simde_mm_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2); - psi_a_m7_p5 = simde_mm_slli_epi16(psi_a_m7_p5, 2); - psi_a_m7_p3 = simde_mm_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2); - psi_a_m7_p3 = simde_mm_slli_epi16(psi_a_m7_p3, 2); - psi_a_m7_p1 = simde_mm_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2); - psi_a_m7_p1 = simde_mm_slli_epi16(psi_a_m7_p1, 2); - psi_a_m7_m1 = simde_mm_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2); - psi_a_m7_m1 = simde_mm_slli_epi16(psi_a_m7_m1, 2); - psi_a_m7_m3 = simde_mm_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2); - psi_a_m7_m3 = simde_mm_slli_epi16(psi_a_m7_m3, 2); - psi_a_m7_m5 = simde_mm_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2); - psi_a_m7_m5 = simde_mm_slli_epi16(psi_a_m7_m5, 2); - psi_a_m7_m7 = simde_mm_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2); - psi_a_m7_m7 = simde_mm_slli_epi16(psi_a_m7_m7, 2); - - // Calculation of a group of two terms in the bit metric involving squares of interference - simde__m128i a_sq_p7_p7 = square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_p5 = square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_p3 = square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_p1 = square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_m1 = square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_m3 = square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_m5 = square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p7_m7 = square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_p7 = square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_p5 = square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_p3 = square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_p1 = square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_m1 = square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_m3 = square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_m5 = square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p5_m7 = square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_p7 = square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_p5 = square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_p3 = square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_p1 = square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_m1 = square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_m3 = square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_m5 = square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p3_m7 = square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_p7 = square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_p5 = square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_p3 = square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_p1 = square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_m1 = square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_m3 = square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_m5 = square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_p1_m7 = square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_p7 = square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_p5 = square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_p3 = square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_p1 = square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_m1 = square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_m3 = square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_m5 = square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m1_m7 = square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_p7 = square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_p5 = square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_p3 = square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_p1 = square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_m1 = square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_m3 = square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_m5 = square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m3_m7 = square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_p7 = square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_p5 = square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_p3 = square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_p1 = square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_m1 = square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_m3 = square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_m5 = square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m5_m7 = square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_p7 = square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_p5 = square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_p3 = square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_p1 = square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_m1 = square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_m3 = square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_m5 = square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m128i a_sq_m7_m7 = square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR); + // Calculation of a group of two terms in the bit metric involving squares of interference + a_sq_s[j] = square_a_64qam_epi16(a_r_s[j], a_i_s[j], ch_mag_int, SQRT_42_OVER_FOUR); + } // Computing different multiples of ||h0||^2 // x=1, y=1 @@ -3162,603 +1634,292 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_98_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); // Computing Metrics - xmm0 = simde_mm_subs_epi16(psi_a_p7_p7, a_sq_p7_p7); - simde__m128i xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_7); - simde__m128i bit_met_p7_p7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_p5, a_sq_p7_p5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_5); - simde__m128i bit_met_p7_p5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_p3, a_sq_p7_p3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_3); - simde__m128i bit_met_p7_p3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_p1, a_sq_p7_p1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_7_1); - simde__m128i bit_met_p7_p1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_m1, a_sq_p7_m1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_1); - simde__m128i bit_met_p7_m1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_m3, a_sq_p7_m3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_3); - simde__m128i bit_met_p7_m3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_m5, a_sq_p7_m5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_5); - simde__m128i bit_met_p7_m5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p7_m7, a_sq_p7_m7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_7_7); - simde__m128i bit_met_p7_m7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_p7, a_sq_p5_p7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_7); - simde__m128i bit_met_p5_p7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_p5, a_sq_p5_p5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_5); - simde__m128i bit_met_p5_p5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_p3, a_sq_p5_p3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_3); - simde__m128i bit_met_p5_p3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_p1, a_sq_p5_p1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_5_1); - simde__m128i bit_met_p5_p1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_m1, a_sq_p5_m1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_1); - simde__m128i bit_met_p5_m1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_m3, a_sq_p5_m3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_3); - simde__m128i bit_met_p5_m3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_m5, a_sq_p5_m5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_5); - simde__m128i bit_met_p5_m5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p5_m7, a_sq_p5_m7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_5_7); - simde__m128i bit_met_p5_m7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_p7, a_sq_p3_p7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_7); - simde__m128i bit_met_p3_p7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_p5, a_sq_p3_p5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_5); - simde__m128i bit_met_p3_p5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_3); - simde__m128i bit_met_p3_p3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_3_1); - simde__m128i bit_met_p3_p1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_1); - simde__m128i bit_met_p3_m1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_3); - simde__m128i bit_met_p3_m3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_m5, a_sq_p3_m5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_5); - simde__m128i bit_met_p3_m5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p3_m7, a_sq_p3_m7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_3_7); - simde__m128i bit_met_p3_m7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_p7, a_sq_p1_p7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_7); - simde__m128i bit_met_p1_p7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_p5, a_sq_p1_p5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_5); - simde__m128i bit_met_p1_p5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_3); - simde__m128i bit_met_p1_p3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_p_1_1); - simde__m128i bit_met_p1_p1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_1); - simde__m128i bit_met_p1_m1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_3); - simde__m128i bit_met_p1_m3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_m5, a_sq_p1_m5); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_5); - simde__m128i bit_met_p1_m5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_p1_m7, a_sq_p1_m7); - xmm1 = simde_mm_adds_epi16(xmm0, y0_m_1_7); - simde__m128i bit_met_p1_m7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + simde__m128i bit_met_s[64] __attribute__((aligned(16))); + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); + bit_met_s[0] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_p7, a_sq_m1_p7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_7); - simde__m128i bit_met_m1_p7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_p5, a_sq_m1_p5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_5); - simde__m128i bit_met_m1_p5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_3); - simde__m128i bit_met_m1_p3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_1_1); - simde__m128i bit_met_m1_p1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_1); - simde__m128i bit_met_m1_m1 = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_3); - simde__m128i bit_met_m1_m3 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_m5, a_sq_m1_m5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_5); - simde__m128i bit_met_m1_m5 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m1_m7, a_sq_m1_m7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_1_7); - simde__m128i bit_met_m1_m7 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_p7, a_sq_m3_p7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_7); - simde__m128i bit_met_m3_p7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_p5, a_sq_m3_p5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_5); - simde__m128i bit_met_m3_p5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_3); - simde__m128i bit_met_m3_p3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_3_1); - simde__m128i bit_met_m3_p1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_1); - simde__m128i bit_met_m3_m1 = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_3); - simde__m128i bit_met_m3_m3 = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_m5, a_sq_m3_m5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_5); - simde__m128i bit_met_m3_m5 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m3_m7, a_sq_m3_m7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_3_7); - simde__m128i bit_met_m3_m7 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_p7, a_sq_m5_p7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_7); - simde__m128i bit_met_m5_p7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_p5, a_sq_m5_p5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_5); - simde__m128i bit_met_m5_p5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_p3, a_sq_m5_p3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_3); - simde__m128i bit_met_m5_p3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_p1, a_sq_m5_p1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_5_1); - simde__m128i bit_met_m5_p1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_m1, a_sq_m5_m1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_1); - simde__m128i bit_met_m5_m1 = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_m3, a_sq_m5_m3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_3); - simde__m128i bit_met_m5_m3 = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_m5, a_sq_m5_m5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_5); - simde__m128i bit_met_m5_m5 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m5_m7, a_sq_m5_m7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_5_7); - simde__m128i bit_met_m5_m7 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_p7, a_sq_m7_p7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_7); - simde__m128i bit_met_m7_p7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_p5, a_sq_m7_p5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_5); - simde__m128i bit_met_m7_p5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_p3, a_sq_m7_p3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_3); - simde__m128i bit_met_m7_p3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_p1, a_sq_m7_p1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_m_7_1); - simde__m128i bit_met_m7_p1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_m1, a_sq_m7_m1); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_1); - simde__m128i bit_met_m7_m1 = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_m3, a_sq_m7_m3); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_3); - simde__m128i bit_met_m7_m3 = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_m5, a_sq_m7_m5); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_5); - simde__m128i bit_met_m7_m5 = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm_subs_epi16(psi_a_m7_m7, a_sq_m7_m7); - xmm1 = simde_mm_subs_epi16(xmm0, y0_p_7_7); - simde__m128i bit_met_m7_m7 = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[1], a_sq_s[1]), y0_s[1]); + bit_met_s[1] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[2], a_sq_s[2]), y0_s[2]); + bit_met_s[2] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[3], a_sq_s[3]), y0_s[3]); + bit_met_s[3] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[4], a_sq_s[4]), y0_s[4]); + bit_met_s[4] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[5], a_sq_s[5]), y0_s[5]); + bit_met_s[5] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[6], a_sq_s[6]), y0_s[6]); + bit_met_s[6] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[7], a_sq_s[7]), y0_s[7]); + bit_met_s[7] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[8], a_sq_s[8]), y0_s[8]); + bit_met_s[8] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[9], a_sq_s[9]), y0_s[9]); + bit_met_s[9] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[10], a_sq_s[10]), y0_s[10]); + bit_met_s[10] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[11], a_sq_s[11]), y0_s[11]); + bit_met_s[11] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[12], a_sq_s[12]), y0_s[12]); + bit_met_s[12] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[13], a_sq_s[13]), y0_s[13]); + bit_met_s[13] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[14], a_sq_s[14]), y0_s[14]); + bit_met_s[14] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[15], a_sq_s[15]), y0_s[15]); + bit_met_s[15] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[16], a_sq_s[16]), y0_s[16]); + bit_met_s[16] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[17], a_sq_s[17]), y0_s[17]); + bit_met_s[17] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[18], a_sq_s[18]), y0_s[18]); + bit_met_s[18] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[19], a_sq_s[19]), y0_s[19]); + bit_met_s[19] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[20], a_sq_s[20]), y0_s[20]); + bit_met_s[20] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[21], a_sq_s[21]), y0_s[21]); + bit_met_s[21] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[22], a_sq_s[22]), y0_s[22]); + bit_met_s[22] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[23], a_sq_s[23]), y0_s[23]); + bit_met_s[23] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[24], a_sq_s[24]), y0_s[24]); + bit_met_s[24] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[25], a_sq_s[25]), y0_s[25]); + bit_met_s[25] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[26], a_sq_s[26]), y0_s[26]); + bit_met_s[26] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[27], a_sq_s[27]), y0_s[27]); + bit_met_s[27] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[28], a_sq_s[28]), y0_s[28]); + bit_met_s[28] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[29], a_sq_s[29]), y0_s[29]); + bit_met_s[29] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[30], a_sq_s[30]), y0_s[30]); + bit_met_s[30] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[31], a_sq_s[31]), y0_s[31]); + bit_met_s[31] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[32], a_sq_s[32]), y0_s[31]); + bit_met_s[32] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[33], a_sq_s[33]), y0_s[30]); + bit_met_s[33] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[34], a_sq_s[34]), y0_s[29]); + bit_met_s[34] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[35], a_sq_s[35]), y0_s[28]); + bit_met_s[35] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[36], a_sq_s[36]), y0_s[27]); + bit_met_s[36] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[37], a_sq_s[37]), y0_s[26]); + bit_met_s[37] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[38], a_sq_s[38]), y0_s[25]); + bit_met_s[38] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[39], a_sq_s[39]), y0_s[24]); + bit_met_s[39] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[40], a_sq_s[40]), y0_s[23]); + bit_met_s[40] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[41], a_sq_s[41]), y0_s[22]); + bit_met_s[41] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[42], a_sq_s[42]), y0_s[21]); + bit_met_s[42] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[43], a_sq_s[43]), y0_s[20]); + bit_met_s[43] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[44], a_sq_s[44]), y0_s[19]); + bit_met_s[44] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[45], a_sq_s[45]), y0_s[18]); + bit_met_s[45] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[46], a_sq_s[46]), y0_s[17]); + bit_met_s[46] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[47], a_sq_s[47]), y0_s[16]); + bit_met_s[47] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[48], a_sq_s[48]), y0_s[15]); + bit_met_s[48] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[49], a_sq_s[49]), y0_s[14]); + bit_met_s[49] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[50], a_sq_s[50]), y0_s[13]); + bit_met_s[50] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[51], a_sq_s[51]), y0_s[12]); + bit_met_s[51] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[52], a_sq_s[52]), y0_s[11]); + bit_met_s[52] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[53], a_sq_s[53]), y0_s[10]); + bit_met_s[53] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[54], a_sq_s[54]), y0_s[9]); + bit_met_s[54] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[55], a_sq_s[55]), y0_s[8]); + bit_met_s[55] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[56], a_sq_s[56]), y0_s[7]); + bit_met_s[56] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[57], a_sq_s[57]), y0_s[6]); + bit_met_s[57] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[58], a_sq_s[58]), y0_s[5]); + bit_met_s[58] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[59], a_sq_s[59]), y0_s[4]); + bit_met_s[59] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[60], a_sq_s[60]), y0_s[3]); + bit_met_s[60] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[61], a_sq_s[61]), y0_s[2]); + bit_met_s[61] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[62], a_sq_s[62]), y0_s[1]); + bit_met_s[62] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[63], a_sq_s[63]), y0_s[0]); + bit_met_s[63] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + // Detection for bits + simde__m128i logmax_den_re0; + simde__m128i logmax_num_re0; // Detection for 1st bit // bit = 1 - xmm0 = simde_mm_max_epi16(bit_met_m7_p7, bit_met_m7_p5); - xmm1 = simde_mm_max_epi16(bit_met_m7_p3, bit_met_m7_p1); - xmm2 = simde_mm_max_epi16(bit_met_m7_m1, bit_met_m7_m3); - xmm3 = simde_mm_max_epi16(bit_met_m7_m5, bit_met_m7_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - simde__m128i logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m5_p5); - xmm1 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m5_p1); - xmm2 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m5_m3); - xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m5_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m3_p7, bit_met_m3_p5); - xmm1 = simde_mm_max_epi16(bit_met_m3_p3, bit_met_m3_p1); - xmm2 = simde_mm_max_epi16(bit_met_m3_m1, bit_met_m3_m3); - xmm3 = simde_mm_max_epi16(bit_met_m3_m5, bit_met_m3_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m1_p5); - xmm1 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m1_p1); - xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m1_m3); - xmm3 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m1_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[56],bit_met_s[57],bit_met_s[58],bit_met_s[59],bit_met_s[60],bit_met_s[61],bit_met_s[62],bit_met_s[63]); + xmm1 = max_epi16(bit_met_s[48],bit_met_s[49],bit_met_s[50],bit_met_s[51],bit_met_s[52],bit_met_s[53],bit_met_s[54],bit_met_s[55]); + xmm2 = max_epi16(bit_met_s[40],bit_met_s[41],bit_met_s[42],bit_met_s[43],bit_met_s[44],bit_met_s[45],bit_met_s[46],bit_met_s[47]); + xmm3 = max_epi16(bit_met_s[32],bit_met_s[33],bit_met_s[34],bit_met_s[35],bit_met_s[36],bit_met_s[37],bit_met_s[38],bit_met_s[39]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); // bit = 0 - xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p7_p5); - xmm1 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p7_p1); - xmm2 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p7_m3); - xmm3 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p7_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - simde__m128i logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p5_p7, bit_met_p5_p5); - xmm1 = simde_mm_max_epi16(bit_met_p5_p3, bit_met_p5_p1); - xmm2 = simde_mm_max_epi16(bit_met_p5_m1, bit_met_p5_m3); - xmm3 = simde_mm_max_epi16(bit_met_p5_m5, bit_met_p5_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p3_p5); - xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p3_p1); - xmm2 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p3_m3); - xmm3 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p3_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p1_p7, bit_met_p1_p5); - xmm1 = simde_mm_max_epi16(bit_met_p1_p3, bit_met_p1_p1); - xmm2 = simde_mm_max_epi16(bit_met_p1_m1, bit_met_p1_m3); - xmm3 = simde_mm_max_epi16(bit_met_p1_m5, bit_met_p1_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[0],bit_met_s[1],bit_met_s[2],bit_met_s[3],bit_met_s[4],bit_met_s[5],bit_met_s[6],bit_met_s[7]); + xmm1 = max_epi16(bit_met_s[8],bit_met_s[9],bit_met_s[10],bit_met_s[11],bit_met_s[12],bit_met_s[13],bit_met_s[14],bit_met_s[15]); + xmm2 = max_epi16(bit_met_s[16],bit_met_s[17],bit_met_s[18],bit_met_s[19],bit_met_s[20],bit_met_s[21],bit_met_s[22],bit_met_s[23]); + xmm3 = max_epi16(bit_met_s[24],bit_met_s[25],bit_met_s[26],bit_met_s[27],bit_met_s[28],bit_met_s[29],bit_met_s[30],bit_met_s[31]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); y0r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 2nd bit // bit = 1 - xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm1 = max_epi16(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm3 = max_epi16(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); // bit = 0 - xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); + xmm1 = max_epi16(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + xmm2 = max_epi16(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); + xmm3 = max_epi16(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); y1r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 3rd bit - xmm0 = simde_mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = simde_mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = simde_mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = simde_mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = simde_mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = simde_mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = simde_mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[63],bit_met_s[62],bit_met_s[61],bit_met_s[60],bit_met_s[59],bit_met_s[58],bit_met_s[57],bit_met_s[56]); + xmm1 = max_epi16(bit_met_s[55],bit_met_s[54],bit_met_s[53],bit_met_s[52],bit_met_s[51],bit_met_s[50],bit_met_s[49],bit_met_s[48]); + xmm2 = max_epi16(bit_met_s[15],bit_met_s[14],bit_met_s[13],bit_met_s[12],bit_met_s[11],bit_met_s[10],bit_met_s[9],bit_met_s[8]); + xmm3 = max_epi16(bit_met_s[7],bit_met_s[6],bit_met_s[5],bit_met_s[4],bit_met_s[3],bit_met_s[2],bit_met_s[1],bit_met_s[0]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = simde_mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = simde_mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = simde_mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = simde_mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = simde_mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = simde_mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[47],bit_met_s[46],bit_met_s[45],bit_met_s[44],bit_met_s[43],bit_met_s[42],bit_met_s[41],bit_met_s[40]); + xmm1 = max_epi16(bit_met_s[39],bit_met_s[38],bit_met_s[37],bit_met_s[36],bit_met_s[35],bit_met_s[34],bit_met_s[33],bit_met_s[32]); + xmm2 = max_epi16(bit_met_s[31],bit_met_s[30],bit_met_s[29],bit_met_s[28],bit_met_s[27],bit_met_s[26],bit_met_s[25],bit_met_s[24]); + xmm3 = max_epi16(bit_met_s[23],bit_met_s[22],bit_met_s[21],bit_met_s[20],bit_met_s[19],bit_met_s[18],bit_met_s[17],bit_met_s[16]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); simde__m128i y2r = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 4th bit - xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + xmm1 = max_epi16(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[49]); + xmm2 = max_epi16(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm3 = max_epi16(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm1 = max_epi16(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); + xmm3 = max_epi16(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); y0i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 5th bit - xmm0 = simde_mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = simde_mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = simde_mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = simde_mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = simde_mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = simde_mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = simde_mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[63],bit_met_s[62],bit_met_s[61],bit_met_s[60],bit_met_s[59],bit_met_s[58],bit_met_s[57],bit_met_s[56]); + xmm1 = max_epi16(bit_met_s[39],bit_met_s[38],bit_met_s[37],bit_met_s[36],bit_met_s[35],bit_met_s[34],bit_met_s[33],bit_met_s[32]); + xmm2 = max_epi16(bit_met_s[31],bit_met_s[30],bit_met_s[29],bit_met_s[28],bit_met_s[27],bit_met_s[26],bit_met_s[25],bit_met_s[24]); + xmm3 = max_epi16(bit_met_s[7],bit_met_s[6],bit_met_s[5],bit_met_s[4],bit_met_s[3],bit_met_s[2],bit_met_s[1],bit_met_s[0]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = simde_mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = simde_mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = simde_mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = simde_mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = simde_mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = simde_mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[55],bit_met_s[54],bit_met_s[53],bit_met_s[52],bit_met_s[51],bit_met_s[50],bit_met_s[49],bit_met_s[48]); + xmm1 = max_epi16(bit_met_s[47],bit_met_s[46],bit_met_s[45],bit_met_s[44],bit_met_s[43],bit_met_s[42],bit_met_s[41],bit_met_s[40]); + xmm2 = max_epi16(bit_met_s[23],bit_met_s[22],bit_met_s[21],bit_met_s[20],bit_met_s[19],bit_met_s[18],bit_met_s[17],bit_met_s[16]); + xmm3 = max_epi16(bit_met_s[15],bit_met_s[14],bit_met_s[13],bit_met_s[12],bit_met_s[11],bit_met_s[10],bit_met_s[9],bit_met_s[8]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); y1i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 6th bit - xmm0 = simde_mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm_max_epi16(bit_met_m5_p1, bit_met_m5_p1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + xmm1 = max_epi16(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[51]); + xmm2 = max_epi16(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm3 = max_epi16(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(xmm4, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = simde_mm_max_epi16(xmm0, xmm1); - xmm5 = simde_mm_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm1 = max_epi16(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + xmm3 = max_epi16(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); + logmax_num_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); simde__m128i y2i = simde_mm_subs_epi16(logmax_num_re0, logmax_den_re0); @@ -3829,26 +1990,27 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, for (int i = 0; i < len256; i += 2) { // Get rho - simde__m256i xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; + simde__m256i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; simde_mm256_separate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i + 1]); simde__m256i rho_rpi = simde_mm256_adds_epi16(xmm2, xmm3); // rho = Re(rho) + Im(rho) simde__m256i rho_rmi = simde_mm256_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) // Compute the different rhos - simde__m256i rho_rpi_1_1 = simde_mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); - simde__m256i rho_rmi_1_1 = simde_mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); - simde__m256i rho_rpi_3_3 = simde_mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); - simde__m256i rho_rmi_3_3 = simde_mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); - simde__m256i rho_rpi_5_5 = simde_mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); - simde__m256i rho_rmi_5_5 = simde_mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); - simde__m256i rho_rpi_7_7 = simde_mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); - simde__m256i rho_rmi_7_7 = simde_mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); + simde__m256i rho_rs[32] __attribute__((aligned(16))); + rho_rs[27] = simde_mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); + rho_rs[28] = simde_mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); + rho_rs[18] = simde_mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); + rho_rs[21] = simde_mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); + rho_rs[9] = simde_mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); + rho_rs[14] = simde_mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); + rho_rs[0] = simde_mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); + rho_rs[7] = simde_mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); - rho_rpi_5_5 = simde_mm256_slli_epi16(rho_rpi_5_5, 1); - rho_rmi_5_5 = simde_mm256_slli_epi16(rho_rmi_5_5, 1); - rho_rpi_7_7 = simde_mm256_slli_epi16(rho_rpi_7_7, 2); - rho_rmi_7_7 = simde_mm256_slli_epi16(rho_rmi_7_7, 2); + rho_rs[9] = simde_mm256_slli_epi16(rho_rs[9], 1); + rho_rs[14] = simde_mm256_slli_epi16(rho_rs[14], 1); + rho_rs[0] = simde_mm256_slli_epi16(rho_rs[0], 2); + rho_rs[7] = simde_mm256_slli_epi16(rho_rs[7], 2); xmm4 = simde_mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42); xmm5 = simde_mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42); @@ -3858,306 +2020,68 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, xmm7 = simde_mm256_slli_epi16(xmm7, 1); xmm8 = simde_mm256_slli_epi16(xmm8, 2); - simde__m256i rho_rpi_1_3 = simde_mm256_adds_epi16(xmm4, xmm6); - simde__m256i rho_rmi_1_3 = simde_mm256_subs_epi16(xmm4, xmm6); - simde__m256i rho_rpi_1_5 = simde_mm256_adds_epi16(xmm4, xmm7); - simde__m256i rho_rmi_1_5 = simde_mm256_subs_epi16(xmm4, xmm7); - simde__m256i rho_rpi_1_7 = simde_mm256_adds_epi16(xmm4, xmm8); - simde__m256i rho_rmi_1_7 = simde_mm256_subs_epi16(xmm4, xmm8); + rho_rs[26] = simde_mm256_adds_epi16(xmm4, xmm6); + rho_rs[29] = simde_mm256_subs_epi16(xmm4, xmm6); + rho_rs[25] = simde_mm256_adds_epi16(xmm4, xmm7); + rho_rs[30] = simde_mm256_subs_epi16(xmm4, xmm7); + rho_rs[24] = simde_mm256_adds_epi16(xmm4, xmm8); + rho_rs[31] = simde_mm256_subs_epi16(xmm4, xmm8); xmm4 = simde_mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42); - simde__m256i rho_rpi_3_1 = simde_mm256_adds_epi16(xmm4, xmm5); - simde__m256i rho_rmi_3_1 = simde_mm256_subs_epi16(xmm4, xmm5); - simde__m256i rho_rpi_3_5 = simde_mm256_adds_epi16(xmm4, xmm7); - simde__m256i rho_rmi_3_5 = simde_mm256_subs_epi16(xmm4, xmm7); - simde__m256i rho_rpi_3_7 = simde_mm256_adds_epi16(xmm4, xmm8); - simde__m256i rho_rmi_3_7 = simde_mm256_subs_epi16(xmm4, xmm8); + rho_rs[19] = simde_mm256_adds_epi16(xmm4, xmm5); + rho_rs[20] = simde_mm256_subs_epi16(xmm4, xmm5); + rho_rs[17] = simde_mm256_adds_epi16(xmm4, xmm7); + rho_rs[22] = simde_mm256_subs_epi16(xmm4, xmm7); + rho_rs[16] = simde_mm256_adds_epi16(xmm4, xmm8); + rho_rs[23] = simde_mm256_subs_epi16(xmm4, xmm8); xmm4 = simde_mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42); xmm4 = simde_mm256_slli_epi16(xmm4, 1); - simde__m256i rho_rpi_5_1 = simde_mm256_adds_epi16(xmm4, xmm5); - simde__m256i rho_rmi_5_1 = simde_mm256_subs_epi16(xmm4, xmm5); - simde__m256i rho_rpi_5_3 = simde_mm256_adds_epi16(xmm4, xmm6); - simde__m256i rho_rmi_5_3 = simde_mm256_subs_epi16(xmm4, xmm6); - simde__m256i rho_rpi_5_7 = simde_mm256_adds_epi16(xmm4, xmm8); - simde__m256i rho_rmi_5_7 = simde_mm256_subs_epi16(xmm4, xmm8); + rho_rs[11] = simde_mm256_adds_epi16(xmm4, xmm5); + rho_rs[12] = simde_mm256_subs_epi16(xmm4, xmm5); + rho_rs[10] = simde_mm256_adds_epi16(xmm4, xmm6); + rho_rs[13] = simde_mm256_subs_epi16(xmm4, xmm6); + rho_rs[8] = simde_mm256_adds_epi16(xmm4, xmm8); + rho_rs[15] = simde_mm256_subs_epi16(xmm4, xmm8); xmm4 = simde_mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42); xmm4 = simde_mm256_slli_epi16(xmm4, 2); - simde__m256i rho_rpi_7_1 = simde_mm256_adds_epi16(xmm4, xmm5); - simde__m256i rho_rmi_7_1 = simde_mm256_subs_epi16(xmm4, xmm5); - simde__m256i rho_rpi_7_3 = simde_mm256_adds_epi16(xmm4, xmm6); - simde__m256i rho_rmi_7_3 = simde_mm256_subs_epi16(xmm4, xmm6); - simde__m256i rho_rpi_7_5 = simde_mm256_adds_epi16(xmm4, xmm7); - simde__m256i rho_rmi_7_5 = simde_mm256_subs_epi16(xmm4, xmm7); + rho_rs[3] = simde_mm256_adds_epi16(xmm4, xmm5); + rho_rs[4] = simde_mm256_subs_epi16(xmm4, xmm5); + rho_rs[2] = simde_mm256_adds_epi16(xmm4, xmm6); + rho_rs[5] = simde_mm256_subs_epi16(xmm4, xmm6); + rho_rs[1] = simde_mm256_adds_epi16(xmm4, xmm7); + rho_rs[6] = simde_mm256_subs_epi16(xmm4, xmm7); // Rearrange interfering MF output - simde__m256i y1r, y1i, xmm0; + simde__m256i y1r, y1i; simde_mm256_separate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i + 1]); // Psi_r calculation from rho_rpi or rho_rmi xmm0 = simde_mm256_broadcastw_epi16(simde_mm_set1_epi16(0)); // ZERO for abs_pi16 - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_7, y1r); + xmm2 = simde_mm256_subs_epi16(rho_rs[0], y1r); - simde__m256i psi_r_p7_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_5, y1r); - simde__m256i psi_r_p7_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_3, y1r); - simde__m256i psi_r_p7_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_1, y1r); - simde__m256i psi_r_p7_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_1, y1r); - simde__m256i psi_r_p7_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_3, y1r); - simde__m256i psi_r_p7_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_5, y1r); - simde__m256i psi_r_p7_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_7, y1r); - simde__m256i psi_r_p7_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_7, y1r); - simde__m256i psi_r_p5_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_5, y1r); - simde__m256i psi_r_p5_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_3, y1r); - simde__m256i psi_r_p5_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_1, y1r); - simde__m256i psi_r_p5_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_1, y1r); - simde__m256i psi_r_p5_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_3, y1r); - simde__m256i psi_r_p5_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_5, y1r); - simde__m256i psi_r_p5_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_7, y1r); - simde__m256i psi_r_p5_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_7, y1r); - simde__m256i psi_r_p3_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_5, y1r); - simde__m256i psi_r_p3_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_3, y1r); - simde__m256i psi_r_p3_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_1, y1r); - simde__m256i psi_r_p3_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_1, y1r); - simde__m256i psi_r_p3_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_3, y1r); - simde__m256i psi_r_p3_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_5, y1r); - simde__m256i psi_r_p3_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_7, y1r); - simde__m256i psi_r_p3_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_7, y1r); - simde__m256i psi_r_p1_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_5, y1r); - simde__m256i psi_r_p1_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_3, y1r); - simde__m256i psi_r_p1_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_1, y1r); - simde__m256i psi_r_p1_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_1, y1r); - simde__m256i psi_r_p1_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_3, y1r); - simde__m256i psi_r_p1_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_5, y1r); - simde__m256i psi_r_p1_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_7, y1r); - simde__m256i psi_r_p1_m7 = simde_mm256_abs_epi16(xmm2); + simde__m256i psi_r_s[64] __attribute__((aligned(16))); + for(int j=0; j<32; j++) // psi_r_s[0~31], rho_rs[0~31] + psi_r_s[j] = simde_mm256_abs_epi16(simde_mm256_subs_epi16(rho_rs[j], y1r)); + for(int j=32; j<64; j++) // psi_r_s[32~64], rho_rs[31~0] + psi_r_s[j] = simde_mm256_abs_epi16(simde_mm256_adds_epi16(rho_rs[63 - j], y1r)); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_7, y1r); - simde__m256i psi_r_m1_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_5, y1r); - simde__m256i psi_r_m1_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_3, y1r); - simde__m256i psi_r_m1_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_1, y1r); - simde__m256i psi_r_m1_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_1, y1r); - simde__m256i psi_r_m1_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_3, y1r); - simde__m256i psi_r_m1_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_5, y1r); - simde__m256i psi_r_m1_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_7, y1r); - simde__m256i psi_r_m1_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_7, y1r); - simde__m256i psi_r_m3_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_5, y1r); - simde__m256i psi_r_m3_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_3, y1r); - simde__m256i psi_r_m3_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_1, y1r); - simde__m256i psi_r_m3_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_1, y1r); - simde__m256i psi_r_m3_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_3, y1r); - simde__m256i psi_r_m3_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_5, y1r); - simde__m256i psi_r_m3_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_7, y1r); - simde__m256i psi_r_m3_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_7, y1r); - simde__m256i psi_r_m5_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_5, y1r); - simde__m256i psi_r_m5_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_3, y1r); - simde__m256i psi_r_m5_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_1, y1r); - simde__m256i psi_r_m5_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_1, y1r); - simde__m256i psi_r_m5_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_3, y1r); - simde__m256i psi_r_m5_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_5, y1r); - simde__m256i psi_r_m5_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_7, y1r); - simde__m256i psi_r_m5_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_7, y1r); - simde__m256i psi_r_m7_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_5, y1r); - simde__m256i psi_r_m7_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_3, y1r); - simde__m256i psi_r_m7_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_1, y1r); - simde__m256i psi_r_m7_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_1, y1r); - simde__m256i psi_r_m7_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_3, y1r); - simde__m256i psi_r_m7_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_5, y1r); - simde__m256i psi_r_m7_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_7, y1r); - simde__m256i psi_r_m7_m7 = simde_mm256_abs_epi16(xmm2); - - // Simde__M256i Psi_i calculation from rho_rpi or rho_rmi - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_7, y1i); - simde__m256i psi_i_p7_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_7, y1i); - simde__m256i psi_i_p7_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_7, y1i); - simde__m256i psi_i_p7_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_7, y1i); - simde__m256i psi_i_p7_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_7, y1i); - simde__m256i psi_i_p7_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_7, y1i); - simde__m256i psi_i_p7_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_7, y1i); - simde__m256i psi_i_p7_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_7, y1i); - simde__m256i psi_i_p7_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_5, y1i); - simde__m256i psi_i_p5_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_5, y1i); - simde__m256i psi_i_p5_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_5, y1i); - simde__m256i psi_i_p5_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_5, y1i); - simde__m256i psi_i_p5_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_5, y1i); - simde__m256i psi_i_p5_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_5, y1i); - simde__m256i psi_i_p5_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_5, y1i); - simde__m256i psi_i_p5_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_5, y1i); - simde__m256i psi_i_p5_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_3, y1i); - simde__m256i psi_i_p3_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_3, y1i); - simde__m256i psi_i_p3_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_3, y1i); - simde__m256i psi_i_p3_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_3, y1i); - simde__m256i psi_i_p3_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_3, y1i); - simde__m256i psi_i_p3_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_3, y1i); - simde__m256i psi_i_p3_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_3, y1i); - simde__m256i psi_i_p3_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_3, y1i); - simde__m256i psi_i_p3_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_7_1, y1i); - simde__m256i psi_i_p1_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_5_1, y1i); - simde__m256i psi_i_p1_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_3_1, y1i); - simde__m256i psi_i_p1_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rmi_1_1, y1i); - simde__m256i psi_i_p1_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_1_1, y1i); - simde__m256i psi_i_p1_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_3_1, y1i); - simde__m256i psi_i_p1_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_5_1, y1i); - simde__m256i psi_i_p1_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rpi_7_1, y1i); - simde__m256i psi_i_p1_m7 = simde_mm256_abs_epi16(xmm2); - - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_1, y1i); - simde__m256i psi_i_m1_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_1, y1i); - simde__m256i psi_i_m1_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_1, y1i); - simde__m256i psi_i_m1_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_1, y1i); - simde__m256i psi_i_m1_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_1, y1i); - simde__m256i psi_i_m1_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_1, y1i); - simde__m256i psi_i_m1_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_1, y1i); - simde__m256i psi_i_m1_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_1, y1i); - simde__m256i psi_i_m1_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_3, y1i); - simde__m256i psi_i_m3_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_3, y1i); - simde__m256i psi_i_m3_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_3, y1i); - simde__m256i psi_i_m3_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_3, y1i); - simde__m256i psi_i_m3_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_3, y1i); - simde__m256i psi_i_m3_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_3, y1i); - simde__m256i psi_i_m3_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_3, y1i); - simde__m256i psi_i_m3_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_3, y1i); - simde__m256i psi_i_m3_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_5, y1i); - simde__m256i psi_i_m5_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_5, y1i); - simde__m256i psi_i_m5_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_5, y1i); - simde__m256i psi_i_m5_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_5, y1i); - simde__m256i psi_i_m5_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_5, y1i); - simde__m256i psi_i_m5_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_5, y1i); - simde__m256i psi_i_m5_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_5, y1i); - simde__m256i psi_i_m5_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_5, y1i); - simde__m256i psi_i_m5_m7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_7_7, y1i); - simde__m256i psi_i_m7_p7 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_5_7, y1i); - simde__m256i psi_i_m7_p5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_3_7, y1i); - simde__m256i psi_i_m7_p3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_subs_epi16(rho_rpi_1_7, y1i); - simde__m256i psi_i_m7_p1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_1_7, y1i); - simde__m256i psi_i_m7_m1 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_3_7, y1i); - simde__m256i psi_i_m7_m3 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_5_7, y1i); - simde__m256i psi_i_m7_m5 = simde_mm256_abs_epi16(xmm2); - xmm2 = simde_mm256_adds_epi16(rho_rmi_7_7, y1i); - simde__m256i psi_i_m7_m7 = simde_mm256_abs_epi16(xmm2); + // simde__m256i psi_i calculation from rho_rpi or rho_rmi + simde__m256i psi_i_s[64] __attribute__((aligned(16))); + const uint8_t rho_rs_index[32] = {7,15,23,31,24,16,8,0,6,14,22,30,25,17,9,1,5,13,21,29,26,18,10,2,4,12,20,28,27,19,11,3}; + for(int k=0; k<32; k+=8){ // psi_i_s[0~31] + for(int j=k; j>3], y0i_seven_over_sqrt_21); + y0_s[j+1] = simde_mm256_adds_epi16(y0r_over_s[j>>3], y0i_five_over_sqrt_21); + y0_s[j+2] = simde_mm256_adds_epi16(y0r_over_s[j>>3], y0i_three_over_sqrt_21); + y0_s[j+3] = simde_mm256_adds_epi16(y0r_over_s[j>>3], y0i_one_over_sqrt_21); + y0_s[j+4] = simde_mm256_subs_epi16(y0r_over_s[j>>3], y0i_one_over_sqrt_21); + y0_s[j+5] = simde_mm256_subs_epi16(y0r_over_s[j>>3], y0i_three_over_sqrt_21); + y0_s[j+6] = simde_mm256_subs_epi16(y0r_over_s[j>>3], y0i_five_over_sqrt_21); + y0_s[j+7] = simde_mm256_subs_epi16(y0r_over_s[j>>3], y0i_seven_over_sqrt_21); + } - simde__m256i y0_m_1_1 = simde_mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m256i y0_m_1_3 = simde_mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m256i y0_m_1_5 = simde_mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m256i y0_m_1_7 = simde_mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m256i y0_m_3_1 = simde_mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m256i y0_m_3_3 = simde_mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m256i y0_m_3_5 = simde_mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m256i y0_m_3_7 = simde_mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m256i y0_m_5_1 = simde_mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m256i y0_m_5_3 = simde_mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m256i y0_m_5_5 = simde_mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m256i y0_m_5_7 = simde_mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - simde__m256i y0_m_7_1 = simde_mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - simde__m256i y0_m_7_3 = simde_mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - simde__m256i y0_m_7_5 = simde_mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - simde__m256i y0_m_7_7 = simde_mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - - // Detection of interference term ch_mag_int_with_sigma2 = simde_mm256_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m256i a_r_p7_p7 = interference_abs_64qam_epi16_256(psi_r_p7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_p5 = interference_abs_64qam_epi16_256(psi_r_p7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_p3 = interference_abs_64qam_epi16_256(psi_r_p7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_p1 = interference_abs_64qam_epi16_256(psi_r_p7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_m1 = interference_abs_64qam_epi16_256(psi_r_p7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_m3 = interference_abs_64qam_epi16_256(psi_r_p7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_m5 = interference_abs_64qam_epi16_256(psi_r_p7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p7_m7 = interference_abs_64qam_epi16_256(psi_r_p7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_p7 = interference_abs_64qam_epi16_256(psi_r_p5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_p5 = interference_abs_64qam_epi16_256(psi_r_p5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_p3 = interference_abs_64qam_epi16_256(psi_r_p5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_p1 = interference_abs_64qam_epi16_256(psi_r_p5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_m1 = interference_abs_64qam_epi16_256(psi_r_p5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_m3 = interference_abs_64qam_epi16_256(psi_r_p5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_m5 = interference_abs_64qam_epi16_256(psi_r_p5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p5_m7 = interference_abs_64qam_epi16_256(psi_r_p5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_p7 = interference_abs_64qam_epi16_256(psi_r_p3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_p5 = interference_abs_64qam_epi16_256(psi_r_p3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_p3 = interference_abs_64qam_epi16_256(psi_r_p3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_p1 = interference_abs_64qam_epi16_256(psi_r_p3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_m1 = interference_abs_64qam_epi16_256(psi_r_p3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_m3 = interference_abs_64qam_epi16_256(psi_r_p3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_m5 = interference_abs_64qam_epi16_256(psi_r_p3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p3_m7 = interference_abs_64qam_epi16_256(psi_r_p3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_p7 = interference_abs_64qam_epi16_256(psi_r_p1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_p5 = interference_abs_64qam_epi16_256(psi_r_p1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_p3 = interference_abs_64qam_epi16_256(psi_r_p1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_p1 = interference_abs_64qam_epi16_256(psi_r_p1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_m1 = interference_abs_64qam_epi16_256(psi_r_p1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_m3 = interference_abs_64qam_epi16_256(psi_r_p1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_m5 = interference_abs_64qam_epi16_256(psi_r_p1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_p1_m7 = interference_abs_64qam_epi16_256(psi_r_p1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_p7 = interference_abs_64qam_epi16_256(psi_r_m1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_p5 = interference_abs_64qam_epi16_256(psi_r_m1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_p3 = interference_abs_64qam_epi16_256(psi_r_m1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_p1 = interference_abs_64qam_epi16_256(psi_r_m1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_m1 = interference_abs_64qam_epi16_256(psi_r_m1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_m3 = interference_abs_64qam_epi16_256(psi_r_m1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_m5 = interference_abs_64qam_epi16_256(psi_r_m1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m1_m7 = interference_abs_64qam_epi16_256(psi_r_m1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_p7 = interference_abs_64qam_epi16_256(psi_r_m3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_p5 = interference_abs_64qam_epi16_256(psi_r_m3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_p3 = interference_abs_64qam_epi16_256(psi_r_m3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_p1 = interference_abs_64qam_epi16_256(psi_r_m3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_m1 = interference_abs_64qam_epi16_256(psi_r_m3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_m3 = interference_abs_64qam_epi16_256(psi_r_m3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_m5 = interference_abs_64qam_epi16_256(psi_r_m3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m3_m7 = interference_abs_64qam_epi16_256(psi_r_m3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_p7 = interference_abs_64qam_epi16_256(psi_r_m5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_p5 = interference_abs_64qam_epi16_256(psi_r_m5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_p3 = interference_abs_64qam_epi16_256(psi_r_m5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_p1 = interference_abs_64qam_epi16_256(psi_r_m5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_m1 = interference_abs_64qam_epi16_256(psi_r_m5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_m3 = interference_abs_64qam_epi16_256(psi_r_m5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_m5 = interference_abs_64qam_epi16_256(psi_r_m5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m5_m7 = interference_abs_64qam_epi16_256(psi_r_m5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_p7 = interference_abs_64qam_epi16_256(psi_r_m7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_p5 = interference_abs_64qam_epi16_256(psi_r_m7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_p3 = interference_abs_64qam_epi16_256(psi_r_m7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_p1 = interference_abs_64qam_epi16_256(psi_r_m7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_m1 = interference_abs_64qam_epi16_256(psi_r_m7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_m3 = interference_abs_64qam_epi16_256(psi_r_m7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_m5 = interference_abs_64qam_epi16_256(psi_r_m7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_r_m7_m7 = interference_abs_64qam_epi16_256(psi_r_m7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); + simde__m256i a_r_s[64] __attribute__((aligned(16))); + simde__m256i a_i_s[64] __attribute__((aligned(16))); + simde__m256i psi_a_s[64] __attribute__((aligned(16))); + simde__m256i a_sq_s[64] __attribute__((aligned(16))); + for(int j=0; j<64; j++){ + // Detection of interference term + a_r_s[j] = interference_abs_64qam_epi16_256(psi_r_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); + a_i_s[j] = interference_abs_64qam_epi16_256(psi_i_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); + + // Calculation of a group of two terms in the bit metric involving product of psi and interference + psi_a_s[j] = prodsum_psi_a_epi16_256(psi_r_s[j], a_r_s[j], psi_i_s[j], a_i_s[j]); - simde__m256i a_i_p7_p7 = interference_abs_64qam_epi16_256(psi_i_p7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_p5 = interference_abs_64qam_epi16_256(psi_i_p7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_p3 = interference_abs_64qam_epi16_256(psi_i_p7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_p1 = interference_abs_64qam_epi16_256(psi_i_p7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_m1 = interference_abs_64qam_epi16_256(psi_i_p7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_m3 = interference_abs_64qam_epi16_256(psi_i_p7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_m5 = interference_abs_64qam_epi16_256(psi_i_p7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p7_m7 = interference_abs_64qam_epi16_256(psi_i_p7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_p7 = interference_abs_64qam_epi16_256(psi_i_p5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_p5 = interference_abs_64qam_epi16_256(psi_i_p5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_p3 = interference_abs_64qam_epi16_256(psi_i_p5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_p1 = interference_abs_64qam_epi16_256(psi_i_p5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_m1 = interference_abs_64qam_epi16_256(psi_i_p5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_m3 = interference_abs_64qam_epi16_256(psi_i_p5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_m5 = interference_abs_64qam_epi16_256(psi_i_p5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p5_m7 = interference_abs_64qam_epi16_256(psi_i_p5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_p7 = interference_abs_64qam_epi16_256(psi_i_p3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_p5 = interference_abs_64qam_epi16_256(psi_i_p3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_p3 = interference_abs_64qam_epi16_256(psi_i_p3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_p1 = interference_abs_64qam_epi16_256(psi_i_p3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_m1 = interference_abs_64qam_epi16_256(psi_i_p3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_m3 = interference_abs_64qam_epi16_256(psi_i_p3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_m5 = interference_abs_64qam_epi16_256(psi_i_p3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p3_m7 = interference_abs_64qam_epi16_256(psi_i_p3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_p7 = interference_abs_64qam_epi16_256(psi_i_p1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_p5 = interference_abs_64qam_epi16_256(psi_i_p1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_p3 = interference_abs_64qam_epi16_256(psi_i_p1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_p1 = interference_abs_64qam_epi16_256(psi_i_p1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_m1 = interference_abs_64qam_epi16_256(psi_i_p1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_m3 = interference_abs_64qam_epi16_256(psi_i_p1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_m5 = interference_abs_64qam_epi16_256(psi_i_p1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_p1_m7 = interference_abs_64qam_epi16_256(psi_i_p1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_p7 = interference_abs_64qam_epi16_256(psi_i_m1_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_p5 = interference_abs_64qam_epi16_256(psi_i_m1_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_p3 = interference_abs_64qam_epi16_256(psi_i_m1_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_p1 = interference_abs_64qam_epi16_256(psi_i_m1_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_m1 = interference_abs_64qam_epi16_256(psi_i_m1_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_m3 = interference_abs_64qam_epi16_256(psi_i_m1_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_m5 = interference_abs_64qam_epi16_256(psi_i_m1_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m1_m7 = interference_abs_64qam_epi16_256(psi_i_m1_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_p7 = interference_abs_64qam_epi16_256(psi_i_m3_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_p5 = interference_abs_64qam_epi16_256(psi_i_m3_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_p3 = interference_abs_64qam_epi16_256(psi_i_m3_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_p1 = interference_abs_64qam_epi16_256(psi_i_m3_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_m1 = interference_abs_64qam_epi16_256(psi_i_m3_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_m3 = interference_abs_64qam_epi16_256(psi_i_m3_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_m5 = interference_abs_64qam_epi16_256(psi_i_m3_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m3_m7 = interference_abs_64qam_epi16_256(psi_i_m3_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_p7 = interference_abs_64qam_epi16_256(psi_i_m5_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_p5 = interference_abs_64qam_epi16_256(psi_i_m5_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_p3 = interference_abs_64qam_epi16_256(psi_i_m5_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_p1 = interference_abs_64qam_epi16_256(psi_i_m5_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_m1 = interference_abs_64qam_epi16_256(psi_i_m5_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_m3 = interference_abs_64qam_epi16_256(psi_i_m5_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_m5 = interference_abs_64qam_epi16_256(psi_i_m5_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m5_m7 = interference_abs_64qam_epi16_256(psi_i_m5_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_p7 = interference_abs_64qam_epi16_256(psi_i_m7_p7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_p5 = interference_abs_64qam_epi16_256(psi_i_m7_p5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_p3 = interference_abs_64qam_epi16_256(psi_i_m7_p3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_p1 = interference_abs_64qam_epi16_256(psi_i_m7_p1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_m1 = interference_abs_64qam_epi16_256(psi_i_m7_m1, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_m3 = interference_abs_64qam_epi16_256(psi_i_m7_m3, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_m5 = interference_abs_64qam_epi16_256(psi_i_m7_m5, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - simde__m256i a_i_m7_m7 = interference_abs_64qam_epi16_256(psi_i_m7_m7, - ch_mag_int_with_sigma2, - two_ch_mag_int_with_sigma2, - three_ch_mag_int_with_sigma2, - ONE_OVER_SQRT_2_42, - THREE_OVER_SQRT_2_42, - FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); + // Multiply by sqrt(2) + psi_a_s[j] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(psi_a_s[j], ONE_OVER_SQRT_2), 2); - // Calculation of a group of two terms in the bit metric involving product of psi and interference - simde__m256i psi_a_p7_p7 = prodsum_psi_a_epi16_256(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7); - simde__m256i psi_a_p7_p5 = prodsum_psi_a_epi16_256(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5); - simde__m256i psi_a_p7_p3 = prodsum_psi_a_epi16_256(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3); - simde__m256i psi_a_p7_p1 = prodsum_psi_a_epi16_256(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1); - simde__m256i psi_a_p7_m1 = prodsum_psi_a_epi16_256(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1); - simde__m256i psi_a_p7_m3 = prodsum_psi_a_epi16_256(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3); - simde__m256i psi_a_p7_m5 = prodsum_psi_a_epi16_256(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5); - simde__m256i psi_a_p7_m7 = prodsum_psi_a_epi16_256(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7); - simde__m256i psi_a_p5_p7 = prodsum_psi_a_epi16_256(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7); - simde__m256i psi_a_p5_p5 = prodsum_psi_a_epi16_256(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5); - simde__m256i psi_a_p5_p3 = prodsum_psi_a_epi16_256(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3); - simde__m256i psi_a_p5_p1 = prodsum_psi_a_epi16_256(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1); - simde__m256i psi_a_p5_m1 = prodsum_psi_a_epi16_256(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1); - simde__m256i psi_a_p5_m3 = prodsum_psi_a_epi16_256(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3); - simde__m256i psi_a_p5_m5 = prodsum_psi_a_epi16_256(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5); - simde__m256i psi_a_p5_m7 = prodsum_psi_a_epi16_256(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7); - simde__m256i psi_a_p3_p7 = prodsum_psi_a_epi16_256(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7); - simde__m256i psi_a_p3_p5 = prodsum_psi_a_epi16_256(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5); - simde__m256i psi_a_p3_p3 = prodsum_psi_a_epi16_256(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3); - simde__m256i psi_a_p3_p1 = prodsum_psi_a_epi16_256(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1); - simde__m256i psi_a_p3_m1 = prodsum_psi_a_epi16_256(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1); - simde__m256i psi_a_p3_m3 = prodsum_psi_a_epi16_256(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3); - simde__m256i psi_a_p3_m5 = prodsum_psi_a_epi16_256(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5); - simde__m256i psi_a_p3_m7 = prodsum_psi_a_epi16_256(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7); - simde__m256i psi_a_p1_p7 = prodsum_psi_a_epi16_256(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7); - simde__m256i psi_a_p1_p5 = prodsum_psi_a_epi16_256(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5); - simde__m256i psi_a_p1_p3 = prodsum_psi_a_epi16_256(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3); - simde__m256i psi_a_p1_p1 = prodsum_psi_a_epi16_256(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1); - simde__m256i psi_a_p1_m1 = prodsum_psi_a_epi16_256(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1); - simde__m256i psi_a_p1_m3 = prodsum_psi_a_epi16_256(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3); - simde__m256i psi_a_p1_m5 = prodsum_psi_a_epi16_256(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5); - simde__m256i psi_a_p1_m7 = prodsum_psi_a_epi16_256(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7); - simde__m256i psi_a_m1_p7 = prodsum_psi_a_epi16_256(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7); - simde__m256i psi_a_m1_p5 = prodsum_psi_a_epi16_256(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5); - simde__m256i psi_a_m1_p3 = prodsum_psi_a_epi16_256(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3); - simde__m256i psi_a_m1_p1 = prodsum_psi_a_epi16_256(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1); - simde__m256i psi_a_m1_m1 = prodsum_psi_a_epi16_256(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1); - simde__m256i psi_a_m1_m3 = prodsum_psi_a_epi16_256(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3); - simde__m256i psi_a_m1_m5 = prodsum_psi_a_epi16_256(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5); - simde__m256i psi_a_m1_m7 = prodsum_psi_a_epi16_256(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7); - simde__m256i psi_a_m3_p7 = prodsum_psi_a_epi16_256(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7); - simde__m256i psi_a_m3_p5 = prodsum_psi_a_epi16_256(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5); - simde__m256i psi_a_m3_p3 = prodsum_psi_a_epi16_256(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3); - simde__m256i psi_a_m3_p1 = prodsum_psi_a_epi16_256(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1); - simde__m256i psi_a_m3_m1 = prodsum_psi_a_epi16_256(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1); - simde__m256i psi_a_m3_m3 = prodsum_psi_a_epi16_256(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3); - simde__m256i psi_a_m3_m5 = prodsum_psi_a_epi16_256(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5); - simde__m256i psi_a_m3_m7 = prodsum_psi_a_epi16_256(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7); - simde__m256i psi_a_m5_p7 = prodsum_psi_a_epi16_256(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7); - simde__m256i psi_a_m5_p5 = prodsum_psi_a_epi16_256(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5); - simde__m256i psi_a_m5_p3 = prodsum_psi_a_epi16_256(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3); - simde__m256i psi_a_m5_p1 = prodsum_psi_a_epi16_256(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1); - simde__m256i psi_a_m5_m1 = prodsum_psi_a_epi16_256(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1); - simde__m256i psi_a_m5_m3 = prodsum_psi_a_epi16_256(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3); - simde__m256i psi_a_m5_m5 = prodsum_psi_a_epi16_256(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5); - simde__m256i psi_a_m5_m7 = prodsum_psi_a_epi16_256(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7); - simde__m256i psi_a_m7_p7 = prodsum_psi_a_epi16_256(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7); - simde__m256i psi_a_m7_p5 = prodsum_psi_a_epi16_256(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5); - simde__m256i psi_a_m7_p3 = prodsum_psi_a_epi16_256(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3); - simde__m256i psi_a_m7_p1 = prodsum_psi_a_epi16_256(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1); - simde__m256i psi_a_m7_m1 = prodsum_psi_a_epi16_256(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1); - simde__m256i psi_a_m7_m3 = prodsum_psi_a_epi16_256(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3); - simde__m256i psi_a_m7_m5 = prodsum_psi_a_epi16_256(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5); - simde__m256i psi_a_m7_m7 = prodsum_psi_a_epi16_256(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7); - - // Multiply by sqrt(2) - psi_a_p7_p7 = simde_mm256_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); - psi_a_p7_p7 = simde_mm256_slli_epi16(psi_a_p7_p7, 2); - psi_a_p7_p5 = simde_mm256_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2); - psi_a_p7_p5 = simde_mm256_slli_epi16(psi_a_p7_p5, 2); - psi_a_p7_p3 = simde_mm256_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2); - psi_a_p7_p3 = simde_mm256_slli_epi16(psi_a_p7_p3, 2); - psi_a_p7_p1 = simde_mm256_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2); - psi_a_p7_p1 = simde_mm256_slli_epi16(psi_a_p7_p1, 2); - psi_a_p7_m1 = simde_mm256_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2); - psi_a_p7_m1 = simde_mm256_slli_epi16(psi_a_p7_m1, 2); - psi_a_p7_m3 = simde_mm256_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2); - psi_a_p7_m3 = simde_mm256_slli_epi16(psi_a_p7_m3, 2); - psi_a_p7_m5 = simde_mm256_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2); - psi_a_p7_m5 = simde_mm256_slli_epi16(psi_a_p7_m5, 2); - psi_a_p7_m7 = simde_mm256_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2); - psi_a_p7_m7 = simde_mm256_slli_epi16(psi_a_p7_m7, 2); - psi_a_p5_p7 = simde_mm256_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2); - psi_a_p5_p7 = simde_mm256_slli_epi16(psi_a_p5_p7, 2); - psi_a_p5_p5 = simde_mm256_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2); - psi_a_p5_p5 = simde_mm256_slli_epi16(psi_a_p5_p5, 2); - psi_a_p5_p3 = simde_mm256_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2); - psi_a_p5_p3 = simde_mm256_slli_epi16(psi_a_p5_p3, 2); - psi_a_p5_p1 = simde_mm256_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2); - psi_a_p5_p1 = simde_mm256_slli_epi16(psi_a_p5_p1, 2); - psi_a_p5_m1 = simde_mm256_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2); - psi_a_p5_m1 = simde_mm256_slli_epi16(psi_a_p5_m1, 2); - psi_a_p5_m3 = simde_mm256_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2); - psi_a_p5_m3 = simde_mm256_slli_epi16(psi_a_p5_m3, 2); - psi_a_p5_m5 = simde_mm256_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2); - psi_a_p5_m5 = simde_mm256_slli_epi16(psi_a_p5_m5, 2); - psi_a_p5_m7 = simde_mm256_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2); - psi_a_p5_m7 = simde_mm256_slli_epi16(psi_a_p5_m7, 2); - psi_a_p3_p7 = simde_mm256_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2); - psi_a_p3_p7 = simde_mm256_slli_epi16(psi_a_p3_p7, 2); - psi_a_p3_p5 = simde_mm256_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2); - psi_a_p3_p5 = simde_mm256_slli_epi16(psi_a_p3_p5, 2); - psi_a_p3_p3 = simde_mm256_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2); - psi_a_p3_p3 = simde_mm256_slli_epi16(psi_a_p3_p3, 2); - psi_a_p3_p1 = simde_mm256_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2); - psi_a_p3_p1 = simde_mm256_slli_epi16(psi_a_p3_p1, 2); - psi_a_p3_m1 = simde_mm256_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2); - psi_a_p3_m1 = simde_mm256_slli_epi16(psi_a_p3_m1, 2); - psi_a_p3_m3 = simde_mm256_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2); - psi_a_p3_m3 = simde_mm256_slli_epi16(psi_a_p3_m3, 2); - psi_a_p3_m5 = simde_mm256_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2); - psi_a_p3_m5 = simde_mm256_slli_epi16(psi_a_p3_m5, 2); - psi_a_p3_m7 = simde_mm256_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2); - psi_a_p3_m7 = simde_mm256_slli_epi16(psi_a_p3_m7, 2); - psi_a_p1_p7 = simde_mm256_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2); - psi_a_p1_p7 = simde_mm256_slli_epi16(psi_a_p1_p7, 2); - psi_a_p1_p5 = simde_mm256_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2); - psi_a_p1_p5 = simde_mm256_slli_epi16(psi_a_p1_p5, 2); - psi_a_p1_p3 = simde_mm256_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2); - psi_a_p1_p3 = simde_mm256_slli_epi16(psi_a_p1_p3, 2); - psi_a_p1_p1 = simde_mm256_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2); - psi_a_p1_p1 = simde_mm256_slli_epi16(psi_a_p1_p1, 2); - psi_a_p1_m1 = simde_mm256_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2); - psi_a_p1_m1 = simde_mm256_slli_epi16(psi_a_p1_m1, 2); - psi_a_p1_m3 = simde_mm256_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2); - psi_a_p1_m3 = simde_mm256_slli_epi16(psi_a_p1_m3, 2); - psi_a_p1_m5 = simde_mm256_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2); - psi_a_p1_m5 = simde_mm256_slli_epi16(psi_a_p1_m5, 2); - psi_a_p1_m7 = simde_mm256_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2); - psi_a_p1_m7 = simde_mm256_slli_epi16(psi_a_p1_m7, 2); - psi_a_m1_p7 = simde_mm256_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2); - psi_a_m1_p7 = simde_mm256_slli_epi16(psi_a_m1_p7, 2); - psi_a_m1_p5 = simde_mm256_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2); - psi_a_m1_p5 = simde_mm256_slli_epi16(psi_a_m1_p5, 2); - psi_a_m1_p3 = simde_mm256_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2); - psi_a_m1_p3 = simde_mm256_slli_epi16(psi_a_m1_p3, 2); - psi_a_m1_p1 = simde_mm256_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2); - psi_a_m1_p1 = simde_mm256_slli_epi16(psi_a_m1_p1, 2); - psi_a_m1_m1 = simde_mm256_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2); - psi_a_m1_m1 = simde_mm256_slli_epi16(psi_a_m1_m1, 2); - psi_a_m1_m3 = simde_mm256_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2); - psi_a_m1_m3 = simde_mm256_slli_epi16(psi_a_m1_m3, 2); - psi_a_m1_m5 = simde_mm256_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2); - psi_a_m1_m5 = simde_mm256_slli_epi16(psi_a_m1_m5, 2); - psi_a_m1_m7 = simde_mm256_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2); - psi_a_m1_m7 = simde_mm256_slli_epi16(psi_a_m1_m7, 2); - psi_a_m3_p7 = simde_mm256_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2); - psi_a_m3_p7 = simde_mm256_slli_epi16(psi_a_m3_p7, 2); - psi_a_m3_p5 = simde_mm256_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2); - psi_a_m3_p5 = simde_mm256_slli_epi16(psi_a_m3_p5, 2); - psi_a_m3_p3 = simde_mm256_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2); - psi_a_m3_p3 = simde_mm256_slli_epi16(psi_a_m3_p3, 2); - psi_a_m3_p1 = simde_mm256_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2); - psi_a_m3_p1 = simde_mm256_slli_epi16(psi_a_m3_p1, 2); - psi_a_m3_m1 = simde_mm256_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2); - psi_a_m3_m1 = simde_mm256_slli_epi16(psi_a_m3_m1, 2); - psi_a_m3_m3 = simde_mm256_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2); - psi_a_m3_m3 = simde_mm256_slli_epi16(psi_a_m3_m3, 2); - psi_a_m3_m5 = simde_mm256_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2); - psi_a_m3_m5 = simde_mm256_slli_epi16(psi_a_m3_m5, 2); - psi_a_m3_m7 = simde_mm256_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2); - psi_a_m3_m7 = simde_mm256_slli_epi16(psi_a_m3_m7, 2); - psi_a_m5_p7 = simde_mm256_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2); - psi_a_m5_p7 = simde_mm256_slli_epi16(psi_a_m5_p7, 2); - psi_a_m5_p5 = simde_mm256_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2); - psi_a_m5_p5 = simde_mm256_slli_epi16(psi_a_m5_p5, 2); - psi_a_m5_p3 = simde_mm256_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2); - psi_a_m5_p3 = simde_mm256_slli_epi16(psi_a_m5_p3, 2); - psi_a_m5_p1 = simde_mm256_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2); - psi_a_m5_p1 = simde_mm256_slli_epi16(psi_a_m5_p1, 2); - psi_a_m5_m1 = simde_mm256_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2); - psi_a_m5_m1 = simde_mm256_slli_epi16(psi_a_m5_m1, 2); - psi_a_m5_m3 = simde_mm256_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2); - psi_a_m5_m3 = simde_mm256_slli_epi16(psi_a_m5_m3, 2); - psi_a_m5_m5 = simde_mm256_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2); - psi_a_m5_m5 = simde_mm256_slli_epi16(psi_a_m5_m5, 2); - psi_a_m5_m7 = simde_mm256_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2); - psi_a_m5_m7 = simde_mm256_slli_epi16(psi_a_m5_m7, 2); - psi_a_m7_p7 = simde_mm256_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2); - psi_a_m7_p7 = simde_mm256_slli_epi16(psi_a_m7_p7, 2); - psi_a_m7_p5 = simde_mm256_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2); - psi_a_m7_p5 = simde_mm256_slli_epi16(psi_a_m7_p5, 2); - psi_a_m7_p3 = simde_mm256_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2); - psi_a_m7_p3 = simde_mm256_slli_epi16(psi_a_m7_p3, 2); - psi_a_m7_p1 = simde_mm256_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2); - psi_a_m7_p1 = simde_mm256_slli_epi16(psi_a_m7_p1, 2); - psi_a_m7_m1 = simde_mm256_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2); - psi_a_m7_m1 = simde_mm256_slli_epi16(psi_a_m7_m1, 2); - psi_a_m7_m3 = simde_mm256_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2); - psi_a_m7_m3 = simde_mm256_slli_epi16(psi_a_m7_m3, 2); - psi_a_m7_m5 = simde_mm256_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2); - psi_a_m7_m5 = simde_mm256_slli_epi16(psi_a_m7_m5, 2); - psi_a_m7_m7 = simde_mm256_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2); - psi_a_m7_m7 = simde_mm256_slli_epi16(psi_a_m7_m7, 2); - - // Calculation of a group of two terms in the bit metric involving squares of interference - simde__m256i a_sq_p7_p7 = square_a_64qam_epi16_256(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_p5 = square_a_64qam_epi16_256(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_p3 = square_a_64qam_epi16_256(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_p1 = square_a_64qam_epi16_256(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_m1 = square_a_64qam_epi16_256(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_m3 = square_a_64qam_epi16_256(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_m5 = square_a_64qam_epi16_256(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p7_m7 = square_a_64qam_epi16_256(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_p7 = square_a_64qam_epi16_256(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_p5 = square_a_64qam_epi16_256(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_p3 = square_a_64qam_epi16_256(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_p1 = square_a_64qam_epi16_256(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_m1 = square_a_64qam_epi16_256(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_m3 = square_a_64qam_epi16_256(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_m5 = square_a_64qam_epi16_256(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p5_m7 = square_a_64qam_epi16_256(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_p7 = square_a_64qam_epi16_256(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_p5 = square_a_64qam_epi16_256(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_p3 = square_a_64qam_epi16_256(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_p1 = square_a_64qam_epi16_256(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_m1 = square_a_64qam_epi16_256(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_m3 = square_a_64qam_epi16_256(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_m5 = square_a_64qam_epi16_256(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p3_m7 = square_a_64qam_epi16_256(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_p7 = square_a_64qam_epi16_256(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_p5 = square_a_64qam_epi16_256(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_p3 = square_a_64qam_epi16_256(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_p1 = square_a_64qam_epi16_256(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_m1 = square_a_64qam_epi16_256(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_m3 = square_a_64qam_epi16_256(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_m5 = square_a_64qam_epi16_256(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_p1_m7 = square_a_64qam_epi16_256(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_p7 = square_a_64qam_epi16_256(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_p5 = square_a_64qam_epi16_256(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_p3 = square_a_64qam_epi16_256(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_p1 = square_a_64qam_epi16_256(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_m1 = square_a_64qam_epi16_256(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_m3 = square_a_64qam_epi16_256(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_m5 = square_a_64qam_epi16_256(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m1_m7 = square_a_64qam_epi16_256(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_p7 = square_a_64qam_epi16_256(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_p5 = square_a_64qam_epi16_256(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_p3 = square_a_64qam_epi16_256(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_p1 = square_a_64qam_epi16_256(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_m1 = square_a_64qam_epi16_256(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_m3 = square_a_64qam_epi16_256(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_m5 = square_a_64qam_epi16_256(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m3_m7 = square_a_64qam_epi16_256(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_p7 = square_a_64qam_epi16_256(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_p5 = square_a_64qam_epi16_256(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_p3 = square_a_64qam_epi16_256(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_p1 = square_a_64qam_epi16_256(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_m1 = square_a_64qam_epi16_256(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_m3 = square_a_64qam_epi16_256(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_m5 = square_a_64qam_epi16_256(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m5_m7 = square_a_64qam_epi16_256(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_p7 = square_a_64qam_epi16_256(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_p5 = square_a_64qam_epi16_256(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_p3 = square_a_64qam_epi16_256(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_p1 = square_a_64qam_epi16_256(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_m1 = square_a_64qam_epi16_256(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_m3 = square_a_64qam_epi16_256(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_m5 = square_a_64qam_epi16_256(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR); - simde__m256i a_sq_m7_m7 = square_a_64qam_epi16_256(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR); + // Calculation of a group of two terms in the bit metric involving squares of interference + a_sq_s[j] = square_a_64qam_epi16_256(a_r_s[j], a_i_s[j], ch_mag_int, SQRT_42_OVER_FOUR); + } // Computing different multiples of ||h0||^2 // x=1, y=1 @@ -5544,603 +2177,293 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_98_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); // Computing Metrics - xmm0 = simde_mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7); - simde__m256i xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_7_7); - simde__m256i bit_met_p7_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_7_5); - simde__m256i bit_met_p7_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_7_3); - simde__m256i bit_met_p7_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_7_1); - simde__m256i bit_met_p7_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_7_1); - simde__m256i bit_met_p7_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_7_3); - simde__m256i bit_met_p7_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_7_5); - simde__m256i bit_met_p7_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_7_7); - simde__m256i bit_met_p7_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_5_7); - simde__m256i bit_met_p5_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_5_5); - simde__m256i bit_met_p5_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_5_3); - simde__m256i bit_met_p5_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_5_1); - simde__m256i bit_met_p5_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_5_1); - simde__m256i bit_met_p5_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_5_3); - simde__m256i bit_met_p5_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_5_5); - simde__m256i bit_met_p5_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_5_7); - simde__m256i bit_met_p5_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_3_7); - simde__m256i bit_met_p3_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_3_5); - simde__m256i bit_met_p3_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_3_3); - simde__m256i bit_met_p3_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_3_1); - simde__m256i bit_met_p3_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_3_1); - simde__m256i bit_met_p3_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_3_3); - simde__m256i bit_met_p3_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_3_5); - simde__m256i bit_met_p3_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_3_7); - simde__m256i bit_met_p3_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_1_7); - simde__m256i bit_met_p1_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_1_5); - simde__m256i bit_met_p1_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_1_3); - simde__m256i bit_met_p1_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_p_1_1); - simde__m256i bit_met_p1_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_1_1); - simde__m256i bit_met_p1_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_1_3); - simde__m256i bit_met_p1_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_1_5); - simde__m256i bit_met_p1_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7); - xmm1 = simde_mm256_adds_epi16(xmm0, y0_m_1_7); - simde__m256i bit_met_p1_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + simde__m256i bit_met_s[64] __attribute__((aligned(16))); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_1_7); - simde__m256i bit_met_m1_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_1_5); - simde__m256i bit_met_m1_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_1_3); - simde__m256i bit_met_m1_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_1_1); - simde__m256i bit_met_m1_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_1_1); - simde__m256i bit_met_m1_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_1_3); - simde__m256i bit_met_m1_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_1_5); - simde__m256i bit_met_m1_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_1_7); - simde__m256i bit_met_m1_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_3_7); - simde__m256i bit_met_m3_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_3_5); - simde__m256i bit_met_m3_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_3_3); - simde__m256i bit_met_m3_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_3_1); - simde__m256i bit_met_m3_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_3_1); - simde__m256i bit_met_m3_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_3_3); - simde__m256i bit_met_m3_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_3_5); - simde__m256i bit_met_m3_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_3_7); - simde__m256i bit_met_m3_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_5_7); - simde__m256i bit_met_m5_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_5_5); - simde__m256i bit_met_m5_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_5_3); - simde__m256i bit_met_m5_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_5_1); - simde__m256i bit_met_m5_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_5_1); - simde__m256i bit_met_m5_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_5_3); - simde__m256i bit_met_m5_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_5_5); - simde__m256i bit_met_m5_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_5_7); - simde__m256i bit_met_m5_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_7_7); - simde__m256i bit_met_m7_p7 = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_7_5); - simde__m256i bit_met_m7_p5 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_7_3); - simde__m256i bit_met_m7_p3 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_m_7_1); - simde__m256i bit_met_m7_p1 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_7_1); - simde__m256i bit_met_m7_m1 = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_7_3); - simde__m256i bit_met_m7_m3 = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_7_5); - simde__m256i bit_met_m7_m5 = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = simde_mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7); - xmm1 = simde_mm256_subs_epi16(xmm0, y0_p_7_7); - simde__m256i bit_met_m7_m7 = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); + bit_met_s[0] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[1], a_sq_s[1]), y0_s[1]); + bit_met_s[1] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[2], a_sq_s[2]), y0_s[2]); + bit_met_s[2] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[3], a_sq_s[3]), y0_s[3]); + bit_met_s[3] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[4], a_sq_s[4]), y0_s[4]); + bit_met_s[4] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[5], a_sq_s[5]), y0_s[5]); + bit_met_s[5] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[6], a_sq_s[6]), y0_s[6]); + bit_met_s[6] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[7], a_sq_s[7]), y0_s[7]); + bit_met_s[7] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[8], a_sq_s[8]), y0_s[8]); + bit_met_s[8] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[9], a_sq_s[9]), y0_s[9]); + bit_met_s[9] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[10], a_sq_s[10]), y0_s[10]); + bit_met_s[10] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[11], a_sq_s[11]), y0_s[11]); + bit_met_s[11] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[12], a_sq_s[12]), y0_s[12]); + bit_met_s[12] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[13], a_sq_s[13]), y0_s[13]); + bit_met_s[13] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[14], a_sq_s[14]), y0_s[14]); + bit_met_s[14] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[15], a_sq_s[15]), y0_s[15]); + bit_met_s[15] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[16], a_sq_s[16]), y0_s[16]); + bit_met_s[16] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[17], a_sq_s[17]), y0_s[17]); + bit_met_s[17] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[18], a_sq_s[18]), y0_s[18]); + bit_met_s[18] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[19], a_sq_s[19]), y0_s[19]); + bit_met_s[19] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[20], a_sq_s[20]), y0_s[20]); + bit_met_s[20] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[21], a_sq_s[21]), y0_s[21]); + bit_met_s[21] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[22], a_sq_s[22]), y0_s[22]); + bit_met_s[22] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[23], a_sq_s[23]), y0_s[23]); + bit_met_s[23] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[24], a_sq_s[24]), y0_s[24]); + bit_met_s[24] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[25], a_sq_s[25]), y0_s[25]); + bit_met_s[25] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[26], a_sq_s[26]), y0_s[26]); + bit_met_s[26] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[27], a_sq_s[27]), y0_s[27]); + bit_met_s[27] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[28], a_sq_s[28]), y0_s[28]); + bit_met_s[28] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[29], a_sq_s[29]), y0_s[29]); + bit_met_s[29] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[30], a_sq_s[30]), y0_s[30]); + bit_met_s[30] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[31], a_sq_s[31]), y0_s[31]); + bit_met_s[31] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[32], a_sq_s[32]), y0_s[31]); + bit_met_s[32] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[33], a_sq_s[33]), y0_s[30]); + bit_met_s[33] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[34], a_sq_s[34]), y0_s[29]); + bit_met_s[34] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[35], a_sq_s[35]), y0_s[28]); + bit_met_s[35] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[36], a_sq_s[36]), y0_s[27]); + bit_met_s[36] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[37], a_sq_s[37]), y0_s[26]); + bit_met_s[37] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[38], a_sq_s[38]), y0_s[25]); + bit_met_s[38] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[39], a_sq_s[39]), y0_s[24]); + bit_met_s[39] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[40], a_sq_s[40]), y0_s[23]); + bit_met_s[40] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[41], a_sq_s[41]), y0_s[22]); + bit_met_s[41] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[42], a_sq_s[42]), y0_s[21]); + bit_met_s[42] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[43], a_sq_s[43]), y0_s[20]); + bit_met_s[43] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[44], a_sq_s[44]), y0_s[19]); + bit_met_s[44] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[45], a_sq_s[45]), y0_s[18]); + bit_met_s[45] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[46], a_sq_s[46]), y0_s[17]); + bit_met_s[46] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[47], a_sq_s[47]), y0_s[16]); + bit_met_s[47] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[48], a_sq_s[48]), y0_s[15]); + bit_met_s[48] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[49], a_sq_s[49]), y0_s[14]); + bit_met_s[49] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[50], a_sq_s[50]), y0_s[13]); + bit_met_s[50] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[51], a_sq_s[51]), y0_s[12]); + bit_met_s[51] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[52], a_sq_s[52]), y0_s[11]); + bit_met_s[52] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[53], a_sq_s[53]), y0_s[10]); + bit_met_s[53] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[54], a_sq_s[54]), y0_s[9]); + bit_met_s[54] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[55], a_sq_s[55]), y0_s[8]); + bit_met_s[55] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[56], a_sq_s[56]), y0_s[7]); + bit_met_s[56] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[57], a_sq_s[57]), y0_s[6]); + bit_met_s[57] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[58], a_sq_s[58]), y0_s[5]); + bit_met_s[58] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[59], a_sq_s[59]), y0_s[4]); + bit_met_s[59] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[60], a_sq_s[60]), y0_s[3]); + bit_met_s[60] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[61], a_sq_s[61]), y0_s[2]); + bit_met_s[61] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[62], a_sq_s[62]), y0_s[1]); + bit_met_s[62] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); + + xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[63], a_sq_s[63]), y0_s[0]); + bit_met_s[63] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + + // Detection for bits + simde__m256i logmax_den_re0; + simde__m256i logmax_num_re0; // Detection for 1st bit // bit = 1 - xmm0 = simde_mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5); - xmm1 = simde_mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - simde__m256i logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5); - xmm1 = simde_mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5); - xmm1 = simde_mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5); - xmm1 = simde_mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[56],bit_met_s[57],bit_met_s[58],bit_met_s[59],bit_met_s[60],bit_met_s[61],bit_met_s[62],bit_met_s[63]); + xmm1 = max_epi16_256(bit_met_s[48],bit_met_s[49],bit_met_s[50],bit_met_s[51],bit_met_s[52],bit_met_s[53],bit_met_s[54],bit_met_s[55]); + xmm2 = max_epi16_256(bit_met_s[40],bit_met_s[41],bit_met_s[42],bit_met_s[43],bit_met_s[44],bit_met_s[45],bit_met_s[46],bit_met_s[47]); + xmm3 = max_epi16_256(bit_met_s[32],bit_met_s[33],bit_met_s[34],bit_met_s[35],bit_met_s[36],bit_met_s[37],bit_met_s[38],bit_met_s[39]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); // bit = 0 - xmm0 = simde_mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1); - xmm2 = simde_mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3); - xmm3 = simde_mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - simde__m256i logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1); - xmm2 = simde_mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3); - xmm3 = simde_mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1); - xmm2 = simde_mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3); - xmm3 = simde_mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1); - xmm2 = simde_mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3); - xmm3 = simde_mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[0],bit_met_s[1],bit_met_s[2],bit_met_s[3],bit_met_s[4],bit_met_s[5],bit_met_s[6],bit_met_s[7]); + xmm1 = max_epi16_256(bit_met_s[8],bit_met_s[9],bit_met_s[10],bit_met_s[11],bit_met_s[12],bit_met_s[13],bit_met_s[14],bit_met_s[15]); + xmm2 = max_epi16_256(bit_met_s[16],bit_met_s[17],bit_met_s[18],bit_met_s[19],bit_met_s[20],bit_met_s[21],bit_met_s[22],bit_met_s[23]); + xmm3 = max_epi16_256(bit_met_s[24],bit_met_s[25],bit_met_s[26],bit_met_s[27],bit_met_s[28],bit_met_s[29],bit_met_s[30],bit_met_s[31]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); y0r = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 2nd bit // bit = 1 - xmm0 = simde_mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm1 = max_epi16_256(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16_256(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); // bit = 0 - xmm0 = simde_mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); + xmm1 = max_epi16_256(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + xmm2 = max_epi16_256(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); + xmm3 = max_epi16_256(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); y1r = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 3rd bit - xmm0 = simde_mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[63],bit_met_s[62],bit_met_s[61],bit_met_s[60],bit_met_s[59],bit_met_s[58],bit_met_s[57],bit_met_s[56]); + xmm1 = max_epi16_256(bit_met_s[55],bit_met_s[54],bit_met_s[53],bit_met_s[52],bit_met_s[51],bit_met_s[50],bit_met_s[49],bit_met_s[48]); + xmm2 = max_epi16_256(bit_met_s[15],bit_met_s[14],bit_met_s[13],bit_met_s[12],bit_met_s[11],bit_met_s[10],bit_met_s[9],bit_met_s[8]); + xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[6],bit_met_s[5],bit_met_s[4],bit_met_s[3],bit_met_s[2],bit_met_s[1],bit_met_s[0]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[47],bit_met_s[46],bit_met_s[45],bit_met_s[44],bit_met_s[43],bit_met_s[42],bit_met_s[41],bit_met_s[40]); + xmm1 = max_epi16_256(bit_met_s[39],bit_met_s[38],bit_met_s[37],bit_met_s[36],bit_met_s[35],bit_met_s[34],bit_met_s[33],bit_met_s[32]); + xmm2 = max_epi16_256(bit_met_s[31],bit_met_s[30],bit_met_s[29],bit_met_s[28],bit_met_s[27],bit_met_s[26],bit_met_s[25],bit_met_s[24]); + xmm3 = max_epi16_256(bit_met_s[23],bit_met_s[22],bit_met_s[21],bit_met_s[20],bit_met_s[19],bit_met_s[18],bit_met_s[17],bit_met_s[16]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); simde__m256i y2r = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 4th bit - xmm0 = simde_mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + xmm1 = max_epi16_256(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[49]); + xmm2 = max_epi16_256(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm1 = max_epi16_256(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16_256(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); + xmm3 = max_epi16_256(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); y0i = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 5th bit - xmm0 = simde_mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[63],bit_met_s[62],bit_met_s[61],bit_met_s[60],bit_met_s[59],bit_met_s[58],bit_met_s[57],bit_met_s[56]); + xmm1 = max_epi16_256(bit_met_s[39],bit_met_s[38],bit_met_s[37],bit_met_s[36],bit_met_s[35],bit_met_s[34],bit_met_s[33],bit_met_s[32]); + xmm2 = max_epi16_256(bit_met_s[31],bit_met_s[30],bit_met_s[29],bit_met_s[28],bit_met_s[27],bit_met_s[26],bit_met_s[25],bit_met_s[24]); + xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[6],bit_met_s[5],bit_met_s[4],bit_met_s[3],bit_met_s[2],bit_met_s[1],bit_met_s[0]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = simde_mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = simde_mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = simde_mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[55],bit_met_s[54],bit_met_s[53],bit_met_s[52],bit_met_s[51],bit_met_s[50],bit_met_s[49],bit_met_s[48]); + xmm1 = max_epi16_256(bit_met_s[47],bit_met_s[46],bit_met_s[45],bit_met_s[44],bit_met_s[43],bit_met_s[42],bit_met_s[41],bit_met_s[40]); + xmm2 = max_epi16_256(bit_met_s[23],bit_met_s[22],bit_met_s[21],bit_met_s[20],bit_met_s[19],bit_met_s[18],bit_met_s[17],bit_met_s[16]); + xmm3 = max_epi16_256(bit_met_s[15],bit_met_s[14],bit_met_s[13],bit_met_s[12],bit_met_s[11],bit_met_s[10],bit_met_s[9],bit_met_s[8]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); y1i = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); // Detection for 6th bit - xmm0 = simde_mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = simde_mm256_max_epi16(logmax_den_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); + xmm1 = max_epi16_256(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[51]); + xmm2 = max_epi16_256(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); + xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); + logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(xmm4, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = simde_mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = simde_mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = simde_mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = simde_mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = simde_mm256_max_epi16(xmm0, xmm1); - xmm5 = simde_mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = simde_mm256_max_epi16(logmax_num_re0, xmm5); + xmm0 = max_epi16_256(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); + xmm1 = max_epi16_256(bit_met_s[5],bit_met_s[13],bit_met_s[21],bit_met_s[29],bit_met_s[37],bit_met_s[45],bit_met_s[53],bit_met_s[61]); + xmm2 = max_epi16_256(bit_met_s[2],bit_met_s[10],bit_met_s[18],bit_met_s[26],bit_met_s[34],bit_met_s[42],bit_met_s[50],bit_met_s[58]); + xmm3 = max_epi16_256(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); + logmax_num_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); simde__m256i y2i = simde_mm256_subs_epi16(logmax_num_re0, logmax_den_re0); From 0c4993249f59a4900b8d155f9460d0d811417b73 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Fri, 15 Sep 2023 00:16:10 +0200 Subject: [PATCH 09/18] fix: CI failure due to SIMD misalignment --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 124 +++++++++--------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index ba8904be11..fcd1c1b059 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -950,30 +950,30 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m128i ch_mag_over_2; simde__m128i ch_mag_9_over_10; - simde__m128i xmm0 __attribute__((aligned(16))); - simde__m128i xmm1 __attribute__((aligned(16))); - simde__m128i xmm2 __attribute__((aligned(16))); - simde__m128i xmm3 __attribute__((aligned(16))); - simde__m128i xmm4 __attribute__((aligned(16))); - simde__m128i xmm5 __attribute__((aligned(16))); - simde__m128i xmm6 __attribute__((aligned(16))); - simde__m128i xmm7 __attribute__((aligned(16))); + simde__m128i xmm0; + simde__m128i xmm1; + simde__m128i xmm2; + simde__m128i xmm3; + simde__m128i xmm4; + simde__m128i xmm5; + simde__m128i xmm6; + simde__m128i xmm7; - simde__m128i rho_rpi __attribute__((aligned(16))); - simde__m128i rho_rmi __attribute__((aligned(16))); - simde__m128i rho_rs[8] __attribute__((aligned(16))); - simde__m128i psi_rs[16] __attribute__((aligned(16))); - simde__m128i psi_is[16] __attribute__((aligned(16))); - simde__m128i a_rs[16] __attribute__((aligned(16))); - simde__m128i a_is[16] __attribute__((aligned(16))); - simde__m128i psi_as[16] __attribute__((aligned(16))); - simde__m128i a_sqs[16] __attribute__((aligned(16))); - simde__m128i y0_s[8] __attribute__((aligned(16))); + simde__m128i rho_rpi; + simde__m128i rho_rmi; + simde__m128i rho_rs[8]; + simde__m128i psi_rs[16]; + simde__m128i psi_is[16]; + simde__m128i a_rs[16]; + simde__m128i a_is[16]; + simde__m128i psi_as[16]; + simde__m128i a_sqs[16]; + simde__m128i y0_s[8]; - simde__m128i y0r __attribute__((aligned(16))); - simde__m128i y0i __attribute__((aligned(16))); - simde__m128i y1r __attribute__((aligned(16))); - simde__m128i y1i __attribute__((aligned(16))); + simde__m128i y0r; + simde__m128i y0i; + simde__m128i y1r; + simde__m128i y1i; // In one iteration, we deal with 8 REs for (int i = 0; i < length >> 2; i += 2) { @@ -1070,7 +1070,7 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, ch_mag_9_over_10 = simde_mm_slli_epi16(ch_mag_9_over_10, 2); /// Compute bit metrics (lambda) - simde__m128i bit_mets[16] __attribute__((aligned(16))); + simde__m128i bit_mets[16]; for(int j=0; j<8; j+=4){ bit_mets[j+0] = simde_mm_subs_epi16(psi_as[j+0], a_sqs[j+0]); bit_mets[j+0] = simde_mm_adds_epi16(bit_mets[j+0], y0_s[j+0]); @@ -1163,28 +1163,28 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, simde__m256i ch_mag_over_2; simde__m256i ch_mag_9_over_10; - simde__m256i xmm2 __attribute__((aligned(16))); - simde__m256i xmm3 __attribute__((aligned(16))); - simde__m256i xmm4 __attribute__((aligned(16))); - simde__m256i xmm5 __attribute__((aligned(16))); - simde__m256i xmm6 __attribute__((aligned(16))); - simde__m256i xmm7 __attribute__((aligned(16))); + simde__m256i xmm2; + simde__m256i xmm3; + simde__m256i xmm4; + simde__m256i xmm5; + simde__m256i xmm6; + simde__m256i xmm7; - simde__m256i rho_rpi __attribute__((aligned(16))); - simde__m256i rho_rmi __attribute__((aligned(16))); - simde__m256i rho_rs[8] __attribute__((aligned(16))); - simde__m256i psi_rs[16] __attribute__((aligned(16))); - simde__m256i psi_is[16] __attribute__((aligned(16))); - simde__m256i a_rs[16] __attribute__((aligned(16))); - simde__m256i a_is[16] __attribute__((aligned(16))); - simde__m256i psi_as[16] __attribute__((aligned(16))); - simde__m256i a_sqs[16] __attribute__((aligned(16))); - simde__m256i y0_s[8] __attribute__((aligned(16))); + simde__m256i rho_rpi; + simde__m256i rho_rmi; + simde__m256i rho_rs[8]; + simde__m256i psi_rs[16]; + simde__m256i psi_is[16]; + simde__m256i a_rs[16]; + simde__m256i a_is[16]; + simde__m256i psi_as[16]; + simde__m256i a_sqs[16]; + simde__m256i y0_s[8]; - simde__m256i y0r __attribute__((aligned(16))); - simde__m256i y0i __attribute__((aligned(16))); - simde__m256i y1r __attribute__((aligned(16))); - simde__m256i y1i __attribute__((aligned(16))); + simde__m256i y0r; + simde__m256i y0i; + simde__m256i y1r; + simde__m256i y1i; // In one iteration, we deal with 8 REs for (int i = 0; i < length >> 3; i += 2) { @@ -1282,7 +1282,7 @@ void nr_ulsch_qam16_qam16(c16_t *stream0_in, /// Compute bit metrics (lambda) - simde__m256i bit_mets[16] __attribute__((aligned(16))); + simde__m256i bit_mets[16]; for(int j=0; j<8; j+=4){ bit_mets[j+0] = simde_mm256_subs_epi16(psi_as[j+0], a_sqs[j+0]); bit_mets[j+0] = simde_mm256_adds_epi16(bit_mets[j+0], y0_s[j+0]); @@ -1454,7 +1454,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, simde__m128i rho_rmi = simde_mm_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) // Compute the different rhos - simde__m128i rho_rs[32] __attribute__((aligned(16))); + simde__m128i rho_rs[32]; rho_rs[27] = simde_mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); rho_rs[28] = simde_mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); rho_rs[18] = simde_mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); @@ -1518,14 +1518,14 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, xmm0 = simde_mm_set1_epi16(0); // ZERO for abs_pi16 xmm2 = simde_mm_subs_epi16(rho_rs[0], y1r); - simde__m128i psi_r_s[64] __attribute__((aligned(16))); + simde__m128i psi_r_s[64]; for(int j=0; j<32; j++) // psi_r_s[0~31], rho_rs[0~31] psi_r_s[j] = simde_mm_abs_epi16(simde_mm_subs_epi16(rho_rs[j], y1r)); for(int j=32; j<64; j++) // psi_r_s[32~64], rho_rs[31~0] psi_r_s[j] = simde_mm_abs_epi16(simde_mm_adds_epi16(rho_rs[63 - j], y1r)); // simde__m128i psi_i calculation from rho_rpi or rho_rmi - simde__m128i psi_i_s[64] __attribute__((aligned(16))); + simde__m128i psi_i_s[64]; const uint8_t rho_rs_index[32] = {7,15,23,31,24,16,8,0,6,14,22,30,25,17,9,1,5,13,21,29,26,18,10,2,4,12,20,28,27,19,11,3}; for(int k=0; k<32; k+=8){ // psi_i_s[0~31] for(int j=k; j>3], y0i_seven_over_sqrt_21); @@ -1582,10 +1582,10 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_int_with_sigma2 = simde_mm_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m128i a_r_s[64] __attribute__((aligned(16))); - simde__m128i a_i_s[64] __attribute__((aligned(16))); - simde__m128i psi_a_s[64] __attribute__((aligned(16))); - simde__m128i a_sq_s[64] __attribute__((aligned(16))); + simde__m128i a_r_s[64]; + simde__m128i a_i_s[64]; + simde__m128i psi_a_s[64]; + simde__m128i a_sq_s[64]; for(int j=0; j<64; j++){ // Detection of interference term a_r_s[j] = interference_abs_64qam_epi16(psi_r_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); @@ -1634,7 +1634,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_98_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); // Computing Metrics - simde__m128i bit_met_s[64] __attribute__((aligned(16))); + simde__m128i bit_met_s[64]; xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); bit_met_s[0] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); @@ -1997,7 +1997,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, simde__m256i rho_rmi = simde_mm256_subs_epi16(xmm2, xmm3); // rho* = Re(rho) - Im(rho) // Compute the different rhos - simde__m256i rho_rs[32] __attribute__((aligned(16))); + simde__m256i rho_rs[32]; rho_rs[27] = simde_mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); rho_rs[28] = simde_mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); rho_rs[18] = simde_mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); @@ -2061,14 +2061,14 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, xmm0 = simde_mm256_broadcastw_epi16(simde_mm_set1_epi16(0)); // ZERO for abs_pi16 xmm2 = simde_mm256_subs_epi16(rho_rs[0], y1r); - simde__m256i psi_r_s[64] __attribute__((aligned(16))); + simde__m256i psi_r_s[64]; for(int j=0; j<32; j++) // psi_r_s[0~31], rho_rs[0~31] psi_r_s[j] = simde_mm256_abs_epi16(simde_mm256_subs_epi16(rho_rs[j], y1r)); for(int j=32; j<64; j++) // psi_r_s[32~64], rho_rs[31~0] psi_r_s[j] = simde_mm256_abs_epi16(simde_mm256_adds_epi16(rho_rs[63 - j], y1r)); // simde__m256i psi_i calculation from rho_rpi or rho_rmi - simde__m256i psi_i_s[64] __attribute__((aligned(16))); + simde__m256i psi_i_s[64]; const uint8_t rho_rs_index[32] = {7,15,23,31,24,16,8,0,6,14,22,30,25,17,9,1,5,13,21,29,26,18,10,2,4,12,20,28,27,19,11,3}; for(int k=0; k<32; k+=8){ // psi_i_s[0~31] for(int j=k; j>3], y0i_seven_over_sqrt_21); @@ -2125,10 +2125,10 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_int_with_sigma2 = simde_mm256_srai_epi16(ch_mag_int, 1); // *2 two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 three_ch_mag_int_with_sigma2 = simde_mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - simde__m256i a_r_s[64] __attribute__((aligned(16))); - simde__m256i a_i_s[64] __attribute__((aligned(16))); - simde__m256i psi_a_s[64] __attribute__((aligned(16))); - simde__m256i a_sq_s[64] __attribute__((aligned(16))); + simde__m256i a_r_s[64]; + simde__m256i a_i_s[64]; + simde__m256i psi_a_s[64]; + simde__m256i a_sq_s[64]; for(int j=0; j<64; j++){ // Detection of interference term a_r_s[j] = interference_abs_64qam_epi16_256(psi_r_s[j], ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, SEVEN_OVER_SQRT_2_42); @@ -2177,7 +2177,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, ch_mag_98_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); // Computing Metrics - simde__m256i bit_met_s[64] __attribute__((aligned(16))); + simde__m256i bit_met_s[64]; xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); bit_met_s[0] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); From 7d6a955b49032540a051dd3adb23d845f55415b7 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Mon, 25 Sep 2023 22:30:18 +0200 Subject: [PATCH 10/18] Fix: variable typo when referencing --- openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index fcd1c1b059..bc88a15328 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -278,7 +278,7 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, simde__m64 *ch_magc = (simde__m64*)&ul_ch_magc[(symbol*(off+(nb_rb*12)))]; xmm0 = simde_mm_abs_pi16(rxF[nb_re64-1]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| - xmm0 = simde_mm_subs_pi16(ch_mag[nb_re-1],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 + xmm0 = simde_mm_subs_pi16(ch_mag[nb_re64-1],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 // xmmtmpD2 contains 4 LLRs xmm1 = simde_mm_abs_pi16(xmm0); xmm1 = simde_mm_subs_pi16(ch_magb[nb_re64-1],xmm1); // contains 4 LLRs From e8bcd1882c885792f07b0b2ac493fabcda33eed9 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Mon, 25 Sep 2023 23:26:20 +0200 Subject: [PATCH 11/18] Refactor: minor refactors * [x] `register simde__m128i xmm0;` -\> `simde__m128i xmm0;` * [x] `simde__m128i xmm0 = simde_mm_abs_epi16(rxF\[i\]);` declaration in for loop * [x] `int nb_re64 = nb_re >> 1;` would be better as `int last2re = (nb_re >> 1) - 1;` * [x] `simde_m_punpckhdq()` is better known as `simde_mm_unpackhi_pi32()` --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index bc88a15328..d5843d9181 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -70,7 +70,6 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, simde__m128i *rxF = (simde__m128i*)rxdataF_comp; simde__m128i *ch_mag; simde__m128i llr128[2]; - register simde__m128i xmm0; simde__m64 *llr64 = (simde__m64*) ulsch_llr; int i; int nb_rb = nb_re / NR_NB_SC_PER_RB; @@ -82,7 +81,7 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, // Each iteration does 4 RE (gives 16 16bit-llrs) for (i=0; i |y_R|, registers of odd index in xmm0-> |y_I| + simde__m128i xmm0 = simde_mm_abs_epi16(rxF[i]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| xmm0 = simde_mm_subs_epi16(ch_mag[i],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 llr128[0] = simde_mm_unpacklo_epi32(rxF[i],xmm0); // llr128[0] contains the llrs of the 1st,2nd,5th and 6th REs @@ -142,7 +141,6 @@ void nr_ulsch_64qam_llr(int32_t *rxdataF_comp, simde__m128i *rxF = (simde__m128i*)rxdataF_comp; simde__m128i *ch_mag,*ch_magb; - register simde__m128i xmm0,xmm1,xmm2; int i; ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; ch_magb = (simde__m128i*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; @@ -153,6 +151,7 @@ void nr_ulsch_64qam_llr(int32_t *rxdataF_comp, // Each iteration does 4 RE (gives 24 16bit-llrs) for (i=0; i> 2; // length in 128-bit words (4 REs) for (int i=0; i |y_R|, registers of odd index in xmm0-> |y_I| xmm0 = simde_mm_subs_epi16(ch_mag[i], xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 xmm1 = simde_mm_abs_epi16(xmm0); @@ -269,7 +268,7 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, if (len_mod4) { printf("len_mod4=%d\n", len_mod4); - int nb_re64 = nb_re >> 1; + int last_2_re = (nb_re >> 1) - 1; simde__m64 *llr64 = (simde__m64 *)llr128; simde__m64 xmm0,xmm1,xmm2; simde__m64 *rxF = (simde__m64*)rxdataF_comp; @@ -277,21 +276,21 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, simde__m64 *ch_magb = (simde__m64*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; simde__m64 *ch_magc = (simde__m64*)&ul_ch_magc[(symbol*(off+(nb_rb*12)))]; - xmm0 = simde_mm_abs_pi16(rxF[nb_re64-1]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| - xmm0 = simde_mm_subs_pi16(ch_mag[nb_re64-1],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 + xmm0 = simde_mm_abs_pi16(rxF[last_2_re]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| + xmm0 = simde_mm_subs_pi16(ch_mag[last_2_re],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 // xmmtmpD2 contains 4 LLRs xmm1 = simde_mm_abs_pi16(xmm0); - xmm1 = simde_mm_subs_pi16(ch_magb[nb_re64-1],xmm1); // contains 4 LLRs + xmm1 = simde_mm_subs_pi16(ch_magb[last_2_re],xmm1); // contains 4 LLRs xmm2 = simde_mm_abs_pi16(xmm1); - xmm2 = simde_mm_subs_pi16(ch_magc[nb_re64-1],xmm2); // contains 4 LLRs + xmm2 = simde_mm_subs_pi16(ch_magc[last_2_re],xmm2); // contains 4 LLRs // rxF[i] A0 A1 // xmm0 B0 B1 // xmm1 C0 C1 // xmm2 D0 D1 - llr64[0] = simde_m_punpckldq(rxF[nb_re64-1],xmm0); // A0 B0 - llr64[2] = simde_m_punpckhdq(rxF[nb_re64-1],xmm0); // A1 B1 - llr64[1] = simde_m_punpckldq(xmm1,xmm2); // C0 D0 - llr64[3] = simde_m_punpckhdq(xmm1,xmm2); // C1 D1 + llr64[0] = simde_mm_unpacklo_pi32(rxF[last_2_re],xmm0); // A0 B0 + llr64[2] = simde_mm_unpackhi_pi32(rxF[last_2_re],xmm0); // A1 B1 + llr64[1] = simde_mm_unpacklo_pi32(xmm1,xmm2); // C0 D0 + llr64[3] = simde_mm_unpackhi_pi32(xmm1,xmm2); // C1 D1 } #else simde__m256i *rxF = (simde__m256i*)rxdataF_comp; From 8b1f42423b878330990caa1d76eeb5ed6a2e539e Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Tue, 26 Sep 2023 01:09:45 +0200 Subject: [PATCH 12/18] Refactor: 16QAM LLR 128 SIMDe assign --- .../PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index d5843d9181..320bc0fcda 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -69,8 +69,7 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, #ifdef USE_128BIT simde__m128i *rxF = (simde__m128i*)rxdataF_comp; simde__m128i *ch_mag; - simde__m128i llr128[2]; - simde__m64 *llr64 = (simde__m64*) ulsch_llr; + simde__m128i *ulsch_llr_128 = (simde__m128i*) ulsch_llr; int i; int nb_rb = nb_re / NR_NB_SC_PER_RB; int off = ((nb_rb&1) == 1)? 4:0; @@ -84,15 +83,9 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, simde__m128i xmm0 = simde_mm_abs_epi16(rxF[i]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| xmm0 = simde_mm_subs_epi16(ch_mag[i],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 - llr128[0] = simde_mm_unpacklo_epi32(rxF[i],xmm0); // llr128[0] contains the llrs of the 1st,2nd,5th and 6th REs - llr128[1] = simde_mm_unpackhi_epi32(rxF[i],xmm0); // llr128[1] contains the llrs of the 3rd, 4th, 7th and 8th REs - - llr64[0] = (simde__m64)simde_mm_extract_epi64(llr128[0], 0); // llr32[0] low 16 bits-> y_R, high 16 bits-> y_I - llr64[1] = (simde__m64)simde_mm_extract_epi64(llr128[0], 1); // llr32[2] low 16 bits-> y_R, high 16 bits-> y_I - llr64[2] = (simde__m64)simde_mm_extract_epi64(llr128[1], 0); // llr32[4] low 16 bits-> y_R, high 16 bits-> y_I - llr64[3] = (simde__m64)simde_mm_extract_epi64(llr128[1], 1); // llr32[6] low 16 bits-> y_R, high 16 bits-> y_I - - llr64 += 4; + ulsch_llr_128[0] = simde_mm_unpacklo_epi32(rxF[i],xmm0); // llr128[0] contains the llrs of the 1st,2nd,5th and 6th REs + ulsch_llr_128[1] = simde_mm_unpackhi_epi32(rxF[i],xmm0); // llr128[1] contains the llrs of the 3rd, 4th, 7th and 8th REs + ulsch_llr_128 += 2; } #else simde__m256i *rxF_256 = (simde__m256i*)rxdataF_comp; From 058eb64ed9340ff03909914bb0aa1acf03c93299 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 27 Sep 2023 16:24:25 +0200 Subject: [PATCH 13/18] chore(ci): adapting to new python build framework. Signed-off-by: Raphael Defosseux --- docker/Dockerfile.build.ubuntu20.cross-arm64 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile.build.ubuntu20.cross-arm64 b/docker/Dockerfile.build.ubuntu20.cross-arm64 index 058d9a091f..b5f770a485 100644 --- a/docker/Dockerfile.build.ubuntu20.cross-arm64 +++ b/docker/Dockerfile.build.ubuntu20.cross-arm64 @@ -34,14 +34,14 @@ COPY . . # build all targets so final targets can be created afterwards RUN /bin/sh oaienv && \ cd cmake_targets && \ - mkdir -p ran_build/build ran_build/build-cross && \ + mkdir -p log ran_build/build ran_build/build-cross && \ cd ran_build/build && \ cmake ../../.. -GNinja && \ echo "====== Start of log for host-tools ======" && \ - ninja ldpc_generators generate_T && \ + ninja ldpc_generators generate_T > ../../log/host-tools.txt 2>&1 && \ echo "====== End of log for host-tools ======" && \ cd ../build-cross/ && \ cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build && \ echo "====== Start of log for cross-build executables ======" && \ - ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator && \ + ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1 && \ echo "====== End of log for cross-build executables ======" From 54248431906490790233986a5f1f7d581406f33e Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Tue, 3 Oct 2023 09:37:45 +0200 Subject: [PATCH 14/18] misc: remove debug print and fix wrong index accessing array Before this MR, openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c: nr_ulsch_qam64_qam64(): xmm3 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1); Should be instead: xmm3 = simde_mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); --- openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 320bc0fcda..f2796b35ce 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -260,7 +260,6 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, } if (len_mod4) { - printf("len_mod4=%d\n", len_mod4); int last_2_re = (nb_re >> 1) - 1; simde__m64 *llr64 = (simde__m64 *)llr128; simde__m64 xmm0,xmm1,xmm2; @@ -1872,7 +1871,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, // Detection for 4th bit xmm0 = max_epi16(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); - xmm1 = max_epi16(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[49]); + xmm1 = max_epi16(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); xmm2 = max_epi16(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); xmm3 = max_epi16(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); @@ -1902,7 +1901,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, // Detection for 6th bit xmm0 = max_epi16(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); - xmm1 = max_epi16(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[51]); + xmm1 = max_epi16(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); xmm2 = max_epi16(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); xmm3 = max_epi16(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); logmax_den_re0 = simde_mm_max_epi16(simde_mm_max_epi16(xmm0, xmm1), simde_mm_max_epi16(xmm2, xmm3)); @@ -2416,7 +2415,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, // Detection for 4th bit xmm0 = max_epi16_256(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); - xmm1 = max_epi16_256(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[49]); + xmm1 = max_epi16_256(bit_met_s[1],bit_met_s[9],bit_met_s[17],bit_met_s[25],bit_met_s[33],bit_met_s[41],bit_met_s[49],bit_met_s[57]); xmm2 = max_epi16_256(bit_met_s[6],bit_met_s[14],bit_met_s[22],bit_met_s[30],bit_met_s[38],bit_met_s[46],bit_met_s[54],bit_met_s[62]); xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); @@ -2446,7 +2445,7 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, // Detection for 6th bit xmm0 = max_epi16_256(bit_met_s[0],bit_met_s[8],bit_met_s[16],bit_met_s[24],bit_met_s[32],bit_met_s[40],bit_met_s[48],bit_met_s[56]); - xmm1 = max_epi16_256(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[51]); + xmm1 = max_epi16_256(bit_met_s[3],bit_met_s[11],bit_met_s[19],bit_met_s[27],bit_met_s[35],bit_met_s[43],bit_met_s[51],bit_met_s[59]); xmm2 = max_epi16_256(bit_met_s[4],bit_met_s[12],bit_met_s[20],bit_met_s[28],bit_met_s[36],bit_met_s[44],bit_met_s[52],bit_met_s[60]); xmm3 = max_epi16_256(bit_met_s[7],bit_met_s[15],bit_met_s[23],bit_met_s[31],bit_met_s[39],bit_met_s[47],bit_met_s[55],bit_met_s[63]); logmax_den_re0 = simde_mm256_max_epi16(simde_mm256_max_epi16(xmm0, xmm1), simde_mm256_max_epi16(xmm2, xmm3)); From cdcb40353898a81015a441dc4204aef51b8f0772 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Tue, 3 Oct 2023 15:57:17 +0200 Subject: [PATCH 15/18] Refactor: Caculate bit_met_s[0..63] in for-loop --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 485 ++---------------- 1 file changed, 47 insertions(+), 438 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index f2796b35ce..61313efbdc 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -1414,15 +1414,6 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, simde__m128i ch_mag_des; simde__m128i ch_mag_int; - simde__m128i ch_mag_98_over_42_with_sigma2; - simde__m128i ch_mag_74_over_42_with_sigma2; - simde__m128i ch_mag_58_over_42_with_sigma2; - simde__m128i ch_mag_50_over_42_with_sigma2; - simde__m128i ch_mag_34_over_42_with_sigma2; - simde__m128i ch_mag_18_over_42_with_sigma2; - simde__m128i ch_mag_26_over_42_with_sigma2; - simde__m128i ch_mag_10_over_42_with_sigma2; - simde__m128i ch_mag_2_over_42_with_sigma2; simde__m128i y0r_one_over_sqrt_21; simde__m128i y0r_three_over_sqrt_21; simde__m128i y0r_five_over_sqrt_21; @@ -1593,229 +1584,43 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, } // Computing different multiples of ||h0||^2 + simde__m128i ch_mag_with_sigma2[10]; + enum ch_mag_over_42with_sigma2_vals {mag2=0, mag10, mag26, mag18, mag34, mag58, mag50, mag74, mag98}; // x=1, y=1 - ch_mag_2_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, ONE_OVER_FOUR_SQRT_42); - ch_mag_2_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_2_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag2] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, ONE_OVER_FOUR_SQRT_42), 1); // x=1, y=3 - ch_mag_10_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, FIVE_OVER_FOUR_SQRT_42); - ch_mag_10_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_10_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag10] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, FIVE_OVER_FOUR_SQRT_42), 1); // x=1, x=5 - ch_mag_26_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, THIRTEEN_OVER_FOUR_SQRT_42); - ch_mag_26_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_26_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag26] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, THIRTEEN_OVER_FOUR_SQRT_42), 1); // x=1, y=7 - ch_mag_50_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag50] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42), 1); // x=3, y=3 - ch_mag_18_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, NINE_OVER_FOUR_SQRT_42); - ch_mag_18_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_18_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag18] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, NINE_OVER_FOUR_SQRT_42), 1); // x=3, y=5 - ch_mag_34_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, SEVENTEEN_OVER_FOUR_SQRT_42); - ch_mag_34_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_34_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag34] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, SEVENTEEN_OVER_FOUR_SQRT_42), 1); // x=3, y=7 - ch_mag_58_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYNINE_OVER_FOUR_SQRT_42); - ch_mag_58_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_58_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag58] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, TWENTYNINE_OVER_FOUR_SQRT_42), 2); // x=5, y=5 - ch_mag_50_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag50] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42), 1); // x=5, y=7 - ch_mag_74_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, THIRTYSEVEN_OVER_FOUR_SQRT_42); - ch_mag_74_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_74_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag74] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, THIRTYSEVEN_OVER_FOUR_SQRT_42), 2); // x=7, y=7 - ch_mag_98_over_42_with_sigma2 = simde_mm_mulhi_epi16(ch_mag_des, FORTYNINE_OVER_FOUR_SQRT_42); - ch_mag_98_over_42_with_sigma2 = simde_mm_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag98] = simde_mm_slli_epi16(simde_mm_mulhi_epi16(ch_mag_des, FORTYNINE_OVER_FOUR_SQRT_42), 2); // Computing Metrics simde__m128i bit_met_s[64]; - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); - bit_met_s[0] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + const enum ch_mag_over_42with_sigma2_vals table[] = { + mag98, mag74, mag58, mag50, mag50, mag58, mag74, mag98, mag74, mag50, mag34, mag26, mag26, mag34, mag50, mag74, + mag58, mag34, mag18, mag10, mag10, mag18, mag34, mag58, mag50, mag26, mag10, mag2, mag2, mag10, mag26, mag50}; - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[1], a_sq_s[1]), y0_s[1]); - bit_met_s[1] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[2], a_sq_s[2]), y0_s[2]); - bit_met_s[2] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[3], a_sq_s[3]), y0_s[3]); - bit_met_s[3] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[4], a_sq_s[4]), y0_s[4]); - bit_met_s[4] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[5], a_sq_s[5]), y0_s[5]); - bit_met_s[5] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[6], a_sq_s[6]), y0_s[6]); - bit_met_s[6] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[7], a_sq_s[7]), y0_s[7]); - bit_met_s[7] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[8], a_sq_s[8]), y0_s[8]); - bit_met_s[8] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[9], a_sq_s[9]), y0_s[9]); - bit_met_s[9] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[10], a_sq_s[10]), y0_s[10]); - bit_met_s[10] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[11], a_sq_s[11]), y0_s[11]); - bit_met_s[11] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[12], a_sq_s[12]), y0_s[12]); - bit_met_s[12] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[13], a_sq_s[13]), y0_s[13]); - bit_met_s[13] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[14], a_sq_s[14]), y0_s[14]); - bit_met_s[14] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[15], a_sq_s[15]), y0_s[15]); - bit_met_s[15] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[16], a_sq_s[16]), y0_s[16]); - bit_met_s[16] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[17], a_sq_s[17]), y0_s[17]); - bit_met_s[17] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[18], a_sq_s[18]), y0_s[18]); - bit_met_s[18] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[19], a_sq_s[19]), y0_s[19]); - bit_met_s[19] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[20], a_sq_s[20]), y0_s[20]); - bit_met_s[20] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[21], a_sq_s[21]), y0_s[21]); - bit_met_s[21] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[22], a_sq_s[22]), y0_s[22]); - bit_met_s[22] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[23], a_sq_s[23]), y0_s[23]); - bit_met_s[23] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[24], a_sq_s[24]), y0_s[24]); - bit_met_s[24] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[25], a_sq_s[25]), y0_s[25]); - bit_met_s[25] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[26], a_sq_s[26]), y0_s[26]); - bit_met_s[26] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[27], a_sq_s[27]), y0_s[27]); - bit_met_s[27] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[28], a_sq_s[28]), y0_s[28]); - bit_met_s[28] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[29], a_sq_s[29]), y0_s[29]); - bit_met_s[29] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[30], a_sq_s[30]), y0_s[30]); - bit_met_s[30] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[31], a_sq_s[31]), y0_s[31]); - bit_met_s[31] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[32], a_sq_s[32]), y0_s[31]); - bit_met_s[32] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[33], a_sq_s[33]), y0_s[30]); - bit_met_s[33] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[34], a_sq_s[34]), y0_s[29]); - bit_met_s[34] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[35], a_sq_s[35]), y0_s[28]); - bit_met_s[35] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[36], a_sq_s[36]), y0_s[27]); - bit_met_s[36] = simde_mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[37], a_sq_s[37]), y0_s[26]); - bit_met_s[37] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[38], a_sq_s[38]), y0_s[25]); - bit_met_s[38] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[39], a_sq_s[39]), y0_s[24]); - bit_met_s[39] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[40], a_sq_s[40]), y0_s[23]); - bit_met_s[40] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[41], a_sq_s[41]), y0_s[22]); - bit_met_s[41] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[42], a_sq_s[42]), y0_s[21]); - bit_met_s[42] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[43], a_sq_s[43]), y0_s[20]); - bit_met_s[43] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[44], a_sq_s[44]), y0_s[19]); - bit_met_s[44] = simde_mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[45], a_sq_s[45]), y0_s[18]); - bit_met_s[45] = simde_mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[46], a_sq_s[46]), y0_s[17]); - bit_met_s[46] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[47], a_sq_s[47]), y0_s[16]); - bit_met_s[47] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[48], a_sq_s[48]), y0_s[15]); - bit_met_s[48] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[49], a_sq_s[49]), y0_s[14]); - bit_met_s[49] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[50], a_sq_s[50]), y0_s[13]); - bit_met_s[50] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[51], a_sq_s[51]), y0_s[12]); - bit_met_s[51] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[52], a_sq_s[52]), y0_s[11]); - bit_met_s[52] = simde_mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[53], a_sq_s[53]), y0_s[10]); - bit_met_s[53] = simde_mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[54], a_sq_s[54]), y0_s[9]); - bit_met_s[54] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[55], a_sq_s[55]), y0_s[8]); - bit_met_s[55] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[56], a_sq_s[56]), y0_s[7]); - bit_met_s[56] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[57], a_sq_s[57]), y0_s[6]); - bit_met_s[57] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[58], a_sq_s[58]), y0_s[5]); - bit_met_s[58] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[59], a_sq_s[59]), y0_s[4]); - bit_met_s[59] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[60], a_sq_s[60]), y0_s[3]); - bit_met_s[60] = simde_mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[61], a_sq_s[61]), y0_s[2]); - bit_met_s[61] = simde_mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[62], a_sq_s[62]), y0_s[1]); - bit_met_s[62] = simde_mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[63], a_sq_s[63]), y0_s[0]); - bit_met_s[63] = simde_mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + for(int i=0; i<32; i++){ + const simde__m128i x = simde_mm_adds_epi16(simde_mm_subs_epi16(psi_a_s[i], a_sq_s[i]), y0_s[i]); + bit_met_s[i] = simde_mm_subs_epi16(x, ch_mag_with_sigma2[table[i]]); + } + for(int i=0; i<32; i++){ + const simde__m128i x = simde_mm_subs_epi16(simde_mm_subs_epi16(psi_a_s[32 + i], a_sq_s[32 + i]), y0_s[31 - i]); + bit_met_s[32 + i] = simde_mm_subs_epi16(x, ch_mag_with_sigma2[table[31 - i]]); + } // Detection for bits simde__m128i logmax_den_re0; @@ -1955,15 +1760,6 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, simde__m256i ch_mag_des; simde__m256i ch_mag_int; - simde__m256i ch_mag_98_over_42_with_sigma2; - simde__m256i ch_mag_74_over_42_with_sigma2; - simde__m256i ch_mag_58_over_42_with_sigma2; - simde__m256i ch_mag_50_over_42_with_sigma2; - simde__m256i ch_mag_34_over_42_with_sigma2; - simde__m256i ch_mag_18_over_42_with_sigma2; - simde__m256i ch_mag_26_over_42_with_sigma2; - simde__m256i ch_mag_10_over_42_with_sigma2; - simde__m256i ch_mag_2_over_42_with_sigma2; simde__m256i y0r_one_over_sqrt_21; simde__m256i y0r_three_over_sqrt_21; simde__m256i y0r_five_over_sqrt_21; @@ -2136,230 +1932,43 @@ void nr_ulsch_qam64_qam64(c16_t *stream0_in, } // Computing different multiples of ||h0||^2 - // x=1, y=1 - ch_mag_2_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, ONE_OVER_FOUR_SQRT_42); - ch_mag_2_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_2_over_42_with_sigma2, 1); + simde__m256i ch_mag_with_sigma2[10]; + enum ch_mag_over_42with_sigma2_vals {mag2=0, mag10, mag26, mag18, mag34, mag58, mag50, mag74, mag98}; + // x=1, y=1 + ch_mag_with_sigma2[mag2] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, ONE_OVER_FOUR_SQRT_42), 1); // x=1, y=3 - ch_mag_10_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, FIVE_OVER_FOUR_SQRT_42); - ch_mag_10_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_10_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag10] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, FIVE_OVER_FOUR_SQRT_42), 1); // x=1, x=5 - ch_mag_26_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, THIRTEEN_OVER_FOUR_SQRT_42); - ch_mag_26_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_26_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag26] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, THIRTEEN_OVER_FOUR_SQRT_42), 1); // x=1, y=7 - ch_mag_50_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag50] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42), 1); // x=3, y=3 - ch_mag_18_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, NINE_OVER_FOUR_SQRT_42); - ch_mag_18_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_18_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag18] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, NINE_OVER_FOUR_SQRT_42), 1); // x=3, y=5 - ch_mag_34_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, SEVENTEEN_OVER_FOUR_SQRT_42); - ch_mag_34_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_34_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag34] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, SEVENTEEN_OVER_FOUR_SQRT_42), 1); // x=3, y=7 - ch_mag_58_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, TWENTYNINE_OVER_FOUR_SQRT_42); - ch_mag_58_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_58_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag58] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, TWENTYNINE_OVER_FOUR_SQRT_42), 2); // x=5, y=5 - ch_mag_50_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_50_over_42_with_sigma2, 1); + ch_mag_with_sigma2[mag50] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, TWENTYFIVE_OVER_FOUR_SQRT_42), 1); // x=5, y=7 - ch_mag_74_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, THIRTYSEVEN_OVER_FOUR_SQRT_42); - ch_mag_74_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_74_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag74] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, THIRTYSEVEN_OVER_FOUR_SQRT_42), 2); // x=7, y=7 - ch_mag_98_over_42_with_sigma2 = simde_mm256_mulhi_epi16(ch_mag_des, FORTYNINE_OVER_FOUR_SQRT_42); - ch_mag_98_over_42_with_sigma2 = simde_mm256_slli_epi16(ch_mag_98_over_42_with_sigma2, 2); + ch_mag_with_sigma2[mag98] = simde_mm256_slli_epi16(simde_mm256_mulhi_epi16(ch_mag_des, FORTYNINE_OVER_FOUR_SQRT_42), 2); // Computing Metrics simde__m256i bit_met_s[64]; + const enum ch_mag_over_42with_sigma2_vals table[] = { + mag98, mag74, mag58, mag50, mag50, mag58, mag74, mag98, mag74, mag50, mag34, mag26, mag26, mag34, mag50, mag74, + mag58, mag34, mag18, mag10, mag10, mag18, mag34, mag58, mag50, mag26, mag10, mag2, mag2, mag10, mag26, mag50}; - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[0], a_sq_s[0]), y0_s[0]); - bit_met_s[0] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[1], a_sq_s[1]), y0_s[1]); - bit_met_s[1] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[2], a_sq_s[2]), y0_s[2]); - bit_met_s[2] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[3], a_sq_s[3]), y0_s[3]); - bit_met_s[3] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[4], a_sq_s[4]), y0_s[4]); - bit_met_s[4] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[5], a_sq_s[5]), y0_s[5]); - bit_met_s[5] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[6], a_sq_s[6]), y0_s[6]); - bit_met_s[6] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[7], a_sq_s[7]), y0_s[7]); - bit_met_s[7] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[8], a_sq_s[8]), y0_s[8]); - bit_met_s[8] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[9], a_sq_s[9]), y0_s[9]); - bit_met_s[9] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[10], a_sq_s[10]), y0_s[10]); - bit_met_s[10] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[11], a_sq_s[11]), y0_s[11]); - bit_met_s[11] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[12], a_sq_s[12]), y0_s[12]); - bit_met_s[12] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[13], a_sq_s[13]), y0_s[13]); - bit_met_s[13] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[14], a_sq_s[14]), y0_s[14]); - bit_met_s[14] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[15], a_sq_s[15]), y0_s[15]); - bit_met_s[15] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[16], a_sq_s[16]), y0_s[16]); - bit_met_s[16] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[17], a_sq_s[17]), y0_s[17]); - bit_met_s[17] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[18], a_sq_s[18]), y0_s[18]); - bit_met_s[18] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[19], a_sq_s[19]), y0_s[19]); - bit_met_s[19] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[20], a_sq_s[20]), y0_s[20]); - bit_met_s[20] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[21], a_sq_s[21]), y0_s[21]); - bit_met_s[21] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[22], a_sq_s[22]), y0_s[22]); - bit_met_s[22] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[23], a_sq_s[23]), y0_s[23]); - bit_met_s[23] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[24], a_sq_s[24]), y0_s[24]); - bit_met_s[24] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[25], a_sq_s[25]), y0_s[25]); - bit_met_s[25] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[26], a_sq_s[26]), y0_s[26]); - bit_met_s[26] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[27], a_sq_s[27]), y0_s[27]); - bit_met_s[27] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[28], a_sq_s[28]), y0_s[28]); - bit_met_s[28] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[29], a_sq_s[29]), y0_s[29]); - bit_met_s[29] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[30], a_sq_s[30]), y0_s[30]); - bit_met_s[30] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[31], a_sq_s[31]), y0_s[31]); - bit_met_s[31] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[32], a_sq_s[32]), y0_s[31]); - bit_met_s[32] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[33], a_sq_s[33]), y0_s[30]); - bit_met_s[33] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[34], a_sq_s[34]), y0_s[29]); - bit_met_s[34] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[35], a_sq_s[35]), y0_s[28]); - bit_met_s[35] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[36], a_sq_s[36]), y0_s[27]); - bit_met_s[36] = simde_mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[37], a_sq_s[37]), y0_s[26]); - bit_met_s[37] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[38], a_sq_s[38]), y0_s[25]); - bit_met_s[38] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[39], a_sq_s[39]), y0_s[24]); - bit_met_s[39] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[40], a_sq_s[40]), y0_s[23]); - bit_met_s[40] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[41], a_sq_s[41]), y0_s[22]); - bit_met_s[41] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[42], a_sq_s[42]), y0_s[21]); - bit_met_s[42] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[43], a_sq_s[43]), y0_s[20]); - bit_met_s[43] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[44], a_sq_s[44]), y0_s[19]); - bit_met_s[44] = simde_mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[45], a_sq_s[45]), y0_s[18]); - bit_met_s[45] = simde_mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[46], a_sq_s[46]), y0_s[17]); - bit_met_s[46] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[47], a_sq_s[47]), y0_s[16]); - bit_met_s[47] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[48], a_sq_s[48]), y0_s[15]); - bit_met_s[48] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[49], a_sq_s[49]), y0_s[14]); - bit_met_s[49] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[50], a_sq_s[50]), y0_s[13]); - bit_met_s[50] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[51], a_sq_s[51]), y0_s[12]); - bit_met_s[51] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[52], a_sq_s[52]), y0_s[11]); - bit_met_s[52] = simde_mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[53], a_sq_s[53]), y0_s[10]); - bit_met_s[53] = simde_mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[54], a_sq_s[54]), y0_s[9]); - bit_met_s[54] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[55], a_sq_s[55]), y0_s[8]); - bit_met_s[55] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[56], a_sq_s[56]), y0_s[7]); - bit_met_s[56] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[57], a_sq_s[57]), y0_s[6]); - bit_met_s[57] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[58], a_sq_s[58]), y0_s[5]); - bit_met_s[58] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[59], a_sq_s[59]), y0_s[4]); - bit_met_s[59] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[60], a_sq_s[60]), y0_s[3]); - bit_met_s[60] = simde_mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[61], a_sq_s[61]), y0_s[2]); - bit_met_s[61] = simde_mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[62], a_sq_s[62]), y0_s[1]); - bit_met_s[62] = simde_mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - - xmm1 = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[63], a_sq_s[63]), y0_s[0]); - bit_met_s[63] = simde_mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); + for(int i=0; i<32; i++){ + const simde__m256i x = simde_mm256_adds_epi16(simde_mm256_subs_epi16(psi_a_s[i], a_sq_s[i]), y0_s[i]); + bit_met_s[i] = simde_mm256_subs_epi16(x, ch_mag_with_sigma2[table[i]]); + } + for(int i=0; i<32; i++){ + const simde__m256i x = simde_mm256_subs_epi16(simde_mm256_subs_epi16(psi_a_s[32 + i], a_sq_s[32 + i]), y0_s[31 - i]); + bit_met_s[32 + i] = simde_mm256_subs_epi16(x, ch_mag_with_sigma2[table[31 - i]]); + } // Detection for bits simde__m256i logmax_den_re0; From e92c827820662e02ff0ffa6cc387062f73faf826 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Tue, 3 Oct 2023 23:49:30 +0200 Subject: [PATCH 16/18] fix: SISO 128 SIMDe due to rebase to 2023.w39 --- .../NR_TRANSPORT/nr_ulsch_llr_computation.c | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 61313efbdc..eb99669564 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -38,7 +38,7 @@ #ifdef __aarch64__ #define USE_128BIT #endif - +#define USE_128BIT //---------------------------------------------------------------------------------------------- // QPSK @@ -71,10 +71,8 @@ void nr_ulsch_16qam_llr(int32_t *rxdataF_comp, simde__m128i *ch_mag; simde__m128i *ulsch_llr_128 = (simde__m128i*) ulsch_llr; int i; - int nb_rb = nb_re / NR_NB_SC_PER_RB; - int off = ((nb_rb&1) == 1)? 4:0; - ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; + ch_mag = (simde__m128i*)ul_ch_mag; nb_re >>= 2; // length in quad words (4 REs) nb_re += ((nb_re&3) == 0 ? 0 : 1); @@ -129,14 +127,10 @@ void nr_ulsch_64qam_llr(int32_t *rxdataF_comp, uint8_t symbol) { #ifdef USE_128BIT - int nb_rb = nb_re / NR_NB_SC_PER_RB; - int off = ((nb_rb&1) == 1)? 4:0; - simde__m128i *rxF = (simde__m128i*)rxdataF_comp; - simde__m128i *ch_mag,*ch_magb; + simde__m128i *ch_mag = (simde__m128i*)ul_ch_mag; + simde__m128i *ch_magb = (simde__m128i*)ul_ch_magb; int i; - ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; - ch_magb = (simde__m128i*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; nb_re = nb_re>>2; // length in 128-bit words (4 REs) nb_re += ((nb_re&3) == 0 ? 0 : 1); @@ -223,15 +217,12 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, uint8_t symbol) { #ifdef USE_128BIT - int off = ((nb_rb&1) == 1)? 4:0; - simde__m128i *rxF = (simde__m128i*)rxdataF_comp; - simde__m128i *ch_mag,*ch_magb,*ch_magc; simde__m128i *llr128=(simde__m128i*)ulsch_llr; - ch_mag = (simde__m128i*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; - ch_magb = (simde__m128i*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; - ch_magc = (simde__m128i*)&ul_ch_magc[(symbol*(off+(nb_rb*12)))]; + simde__m128i* ch_mag = (simde__m128i*)ul_ch_mag; + simde__m128i* ch_magb = (simde__m128i*)ul_ch_magb; + simde__m128i* ch_magc = (simde__m128i*)ul_ch_magc; int len_mod4 = nb_re & 3; int nb_re128 = nb_re >> 2; // length in 128-bit words (4 REs) @@ -264,9 +255,9 @@ void nr_ulsch_256qam_llr(int32_t *rxdataF_comp, simde__m64 *llr64 = (simde__m64 *)llr128; simde__m64 xmm0,xmm1,xmm2; simde__m64 *rxF = (simde__m64*)rxdataF_comp; - simde__m64 *ch_mag = (simde__m64*)&ul_ch_mag[(symbol*(off+(nb_rb*12)))]; - simde__m64 *ch_magb = (simde__m64*)&ul_ch_magb[(symbol*(off+(nb_rb*12)))]; - simde__m64 *ch_magc = (simde__m64*)&ul_ch_magc[(symbol*(off+(nb_rb*12)))]; + simde__m64 *ch_mag = (simde__m64*)ul_ch_mag; + simde__m64 *ch_magb = (simde__m64*)ul_ch_magb; + simde__m64 *ch_magc = (simde__m64*)ul_ch_magc; xmm0 = simde_mm_abs_pi16(rxF[last_2_re]); // registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I| xmm0 = simde_mm_subs_pi16(ch_mag[last_2_re],xmm0); // registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2 From 999bdc01c862091c833973e94c1ebe79bb1720e0 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Wed, 4 Oct 2023 10:14:51 +0200 Subject: [PATCH 17/18] fix: Remove miss-hardcoded #define USE_128BIT --- openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c | 1 - 1 file changed, 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index eb99669564..de5639a149 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -38,7 +38,6 @@ #ifdef __aarch64__ #define USE_128BIT #endif -#define USE_128BIT //---------------------------------------------------------------------------------------------- // QPSK From f451f62c9ca00b6ce72b6b4de662f491da263b47 Mon Sep 17 00:00:00 2001 From: Quency Lin Date: Fri, 6 Oct 2023 16:39:51 +0200 Subject: [PATCH 18/18] Fix cannot pass sanitizer, Align to 16 for 2 contiguous 256 SIMDe --- openair1/PHY/INIT/nr_init.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 9cf5e26cc7..e984384b15 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -686,7 +686,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB) int n_buf = Prx*max_ul_mimo_layers; int nb_re_pusch = N_RB_UL * NR_NB_SC_PER_RB; - int nb_re_pusch2 = (nb_re_pusch + 7) & ~7; + int nb_re_pusch2 = (nb_re_pusch + 15) & ~15; gNB->pusch_vars = (NR_gNB_PUSCH *)malloc16_clear(gNB->max_nb_pusch * sizeof(NR_gNB_PUSCH)); for (int ULSCH_id = 0; ULSCH_id < gNB->max_nb_pusch; ULSCH_id++) { diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 18aea849f7..afa1dac143 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1146,9 +1146,8 @@ static uint8_t nr_ulsch_mmse_2layers(NR_DL_FRAME_PARMS *frame_parms, simde__m128i *after_mf_c_128 = (simde__m128i *)af_mf_10; simde__m128i *after_mf_d_128 = (simde__m128i *)af_mf_11; - int rxComp_aligned = ((nb_rb * 12) % 8) ? (8 - (nb_rb * 12) % 8) : 0; - simde__m128i *rxdataF_comp128_0 = (simde__m128i *)&rxdataF_comp[0][symbol * (nb_rb * 12 + rxComp_aligned)]; - simde__m128i *rxdataF_comp128_1 = (simde__m128i *)&rxdataF_comp[n_rx][symbol * (nb_rb * 12 + rxComp_aligned)]; + simde__m128i *rxdataF_comp128_0 = (simde__m128i *)&rxdataF_comp[0][symbol * buffer_length]; + simde__m128i *rxdataF_comp128_1 = (simde__m128i *)&rxdataF_comp[n_rx][symbol * buffer_length]; if (mod_order > 2) { if (mod_order == 4) { @@ -1277,7 +1276,7 @@ static void inner_rx (PHY_VARS_gNB *gNB, int nb_layer = rel15_ul->nrOfLayers; int nb_rx_ant = frame_parms->nb_antennas_rx; int dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01; - int buffer_length = (rel15_ul->rb_size * NR_NB_SC_PER_RB + 7) & ~7; + int buffer_length = (rel15_ul->rb_size * NR_NB_SC_PER_RB + 15) & ~15; c16_t rxFext[nb_rx_ant][buffer_length] __attribute__((aligned(32))); c16_t chFext[nb_layer][nb_rx_ant][buffer_length] __attribute__((aligned(32))); @@ -1578,8 +1577,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, // extract the data in the OFDM frame, to the start of the array int soffset = (slot&3)*frame_parms->symbols_per_slot*frame_parms->ofdm_symbol_size; - if (nb_re_pusch & 7) - nb_re_pusch += 8 - (nb_re_pusch & 7); + nb_re_pusch = (nb_re_pusch + 15) & ~15; for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) for (int aatx = 0; aatx < rel15_ul->nrOfLayers; aatx++)