diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index fd36a68eac..214b1e2c10 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -1,3 +1,4 @@ + /* * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more * contributor license agreements. See the NOTICE file distributed with @@ -28,6 +29,7 @@ * \warning */ + #include #include #include "nrLDPCdecoder_defs.h" @@ -36,7 +38,10 @@ #include "nrLDPC_mPass.h" #include "nrLDPC_cnProc.h" #include "nrLDPC_bnProc.h" -//include files-> AVX2 + +/*********************************include files-> AVX2**********************/ +/*----------------------------BG1-----------------------------------------*/ + #include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z384_13_AVX2.c" #include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z352_13_AVX2.c" #include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z320_13_AVX2.c" @@ -93,8 +98,68 @@ #include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z3_13_AVX2.c" #include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z2_13_AVX2.c" +/*----------------------------BG2---------------------------------------*/ -//include files for -->AVX512 +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z384_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z352_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z320_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z288_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z256_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z240_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z224_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z208_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z192_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z176_13_AVX2.c" + +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z160_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z144_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z128_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z120_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z112_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z104_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z96_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z88_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z80_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z72_13_AVX2.c" + +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z64_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z60_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z56_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z52_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z48_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z44_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z40_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z36_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z32_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z30_13_AVX2.c" + +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z28_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z26_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z24_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z22_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z20_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z18_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z16_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z15_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z14_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z13_13_AVX2.c" + +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z12_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z11_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z10_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z9_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z8_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z7_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z6_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z5_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z4_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z3_13_AVX2.c" +#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z2_13_AVX2.c" + + + + +/**************************include files for -->AVX512 ******************/ //#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z384_13_AVX2.c" /*#include "nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG1_Z352_13_AVX2.c" @@ -608,7 +673,353 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP } else { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + //nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + + + + // depend on Z + switch (Z) + { + case 384: + { + nrLDPC_cnProc_BG2_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 352: + { + nrLDPC_cnProc_BG2_Z352_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z352_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 320: + { + nrLDPC_cnProc_BG2_Z320_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z320_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 288: + { + nrLDPC_cnProc_BG2_Z288_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z288_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 256: + { + nrLDPC_cnProc_BG2_Z256_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //LDPC_cnProc_BG2_Z256_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 240: + { + + nrLDPC_cnProc_BG2_Z240_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z240_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 224: + { + + nrLDPC_cnProc_BG2_Z224_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z224_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 208: + { + nrLDPC_cnProc_BG2_Z208_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z208_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 192: + { + nrLDPC_cnProc_BG2_Z192_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z192_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 176: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 160: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 144: + { + nrLDPC_cnProc_BG2_Z144_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z144_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 128: + { + nrLDPC_cnProc_BG2_Z128_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z128_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 120: + { + nrLDPC_cnProc_BG2_Z120_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z120_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 112: + { + nrLDPC_cnProc_BG2_Z112_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z112_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 104: + { + nrLDPC_cnProc_BG2_Z104_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z104_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 96: + { + nrLDPC_cnProc_BG2_Z96_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z96_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 88: + { + nrLDPC_cnProc_BG2_Z88_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z88_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 80: + { + nrLDPC_cnProc_BG2_Z80_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z80_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + + case 72: + { + nrLDPC_cnProc_BG2_Z72_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z72_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 64: + { + nrLDPC_cnProc_BG2_Z64_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z64_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 60: + { + nrLDPC_cnProc_BG2_Z60_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z60_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 56: + { + nrLDPC_cnProc_BG2_Z56_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z56_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + + } + case 52: + { + nrLDPC_cnProc_BG2_Z52_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z52_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 48: + { + nrLDPC_cnProc_BG2_Z48_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z48_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 44: + { + nrLDPC_cnProc_BG2_Z44_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z44_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 40: + { + nrLDPC_cnProc_BG2_Z40_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z40_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 36: + { + nrLDPC_cnProc_BG2_Z36_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z36_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 32: + { + nrLDPC_cnProc_BG2_Z32_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z32_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 30: + { + nrLDPC_cnProc_BG2_Z30_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z30_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 28: + { + nrLDPC_cnProc_BG2_Z28_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z28_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 26: + { + nrLDPC_cnProc_BG2_Z26_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z26_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 24: + { + nrLDPC_cnProc_BG2_Z24_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z24_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 22: + { + nrLDPC_cnProc_BG2_Z22_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z22_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 20: + { + nrLDPC_cnProc_BG2_Z20_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z20_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 18: + { + nrLDPC_cnProc_BG2_Z18_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z18_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 16: + { + nrLDPC_cnProc_BG2_Z16_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z16_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 15: + { + nrLDPC_cnProc_BG2_Z15_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z15_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 14: + { + nrLDPC_cnProc_BG2_Z14_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z14_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 13: + { + nrLDPC_cnProc_BG2_Z13_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z13_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 12: + { + nrLDPC_cnProc_BG2_Z12_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z12_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 11: + { + nrLDPC_cnProc_BG2_Z11_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z11_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 10: + { + nrLDPC_cnProc_BG2_Z10_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z10_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 9: + { + nrLDPC_cnProc_BG2_Z9_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z9_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 8: + { + nrLDPC_cnProc_BG2_Z8_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z8_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 7: + { + nrLDPC_cnProc_BG2_Z7_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z7_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 6: + { + nrLDPC_cnProc_BG2_Z6_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z6_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 5: + { + nrLDPC_cnProc_BG2_Z5_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z5_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 4: + { + nrLDPC_cnProc_BG2_Z4_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z4_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 3: + { + nrLDPC_cnProc_BG2_Z3_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z3_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 2: + { + nrLDPC_cnProc_BG2_Z2_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z2_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + }//end switch(Z) } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); @@ -701,10 +1112,10 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->cnProc); #endif - if (BG == 1){ + if (BG == 1){ // depend on Z - switch (Z) - { + switch (Z) + { case 384: { nrLDPC_cnProc_BG1_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); @@ -1052,8 +1463,352 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP } else { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + //nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + + // depend on Z + switch (Z) + { + case 384: + { + nrLDPC_cnProc_BG2_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; } + case 352: + { + nrLDPC_cnProc_BG2_Z352_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z352_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 320: + { + nrLDPC_cnProc_BG2_Z320_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z320_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 288: + { + nrLDPC_cnProc_BG2_Z288_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z288_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 256: + { + nrLDPC_cnProc_BG2_Z256_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //LDPC_cnProc_BG2_Z256_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 240: + { + + nrLDPC_cnProc_BG2_Z240_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z240_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 224: + { + + nrLDPC_cnProc_BG2_Z224_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z224_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 208: + { + nrLDPC_cnProc_BG2_Z208_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z208_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 192: + { + nrLDPC_cnProc_BG2_Z192_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z192_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 176: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 160: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 144: + { + nrLDPC_cnProc_BG2_Z144_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z144_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 128: + { + nrLDPC_cnProc_BG2_Z128_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z128_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 120: + { + nrLDPC_cnProc_BG2_Z120_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z120_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 112: + { + nrLDPC_cnProc_BG2_Z112_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z112_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 104: + { + nrLDPC_cnProc_BG2_Z104_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z104_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 96: + { + nrLDPC_cnProc_BG2_Z96_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z96_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 88: + { + nrLDPC_cnProc_BG2_Z88_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z88_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 80: + { + nrLDPC_cnProc_BG2_Z80_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z80_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + + case 72: + { + nrLDPC_cnProc_BG2_Z72_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z72_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 64: + { + nrLDPC_cnProc_BG2_Z64_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z64_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 60: + { + nrLDPC_cnProc_BG2_Z60_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z60_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 56: + { + nrLDPC_cnProc_BG2_Z56_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z56_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + + } + case 52: + { + nrLDPC_cnProc_BG2_Z52_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z52_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 48: + { + nrLDPC_cnProc_BG2_Z48_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z48_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 44: + { + nrLDPC_cnProc_BG2_Z44_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z44_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 40: + { + nrLDPC_cnProc_BG2_Z40_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z40_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 36: + { + nrLDPC_cnProc_BG2_Z36_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z36_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 32: + { + nrLDPC_cnProc_BG2_Z32_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z32_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 30: + { + nrLDPC_cnProc_BG2_Z30_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z30_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 28: + { + nrLDPC_cnProc_BG2_Z28_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z28_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 26: + { + nrLDPC_cnProc_BG2_Z26_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z26_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 24: + { + nrLDPC_cnProc_BG2_Z24_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z24_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 22: + { + nrLDPC_cnProc_BG2_Z22_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z22_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 20: + { + nrLDPC_cnProc_BG2_Z20_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z20_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 18: + { + nrLDPC_cnProc_BG2_Z18_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z18_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 16: + { + nrLDPC_cnProc_BG2_Z16_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z16_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 15: + { + nrLDPC_cnProc_BG2_Z15_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z15_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 14: + { + nrLDPC_cnProc_BG2_Z14_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z14_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 13: + { + nrLDPC_cnProc_BG2_Z13_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z13_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 12: + { + nrLDPC_cnProc_BG2_Z12_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z12_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 11: + { + nrLDPC_cnProc_BG2_Z11_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z11_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 10: + { + nrLDPC_cnProc_BG2_Z10_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z10_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 9: + { + nrLDPC_cnProc_BG2_Z9_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z9_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 8: + { + nrLDPC_cnProc_BG2_Z8_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z8_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 7: + { + nrLDPC_cnProc_BG2_Z7_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z7_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 6: + { + nrLDPC_cnProc_BG2_Z6_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z6_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 5: + { + nrLDPC_cnProc_BG2_Z5_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z5_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 4: + { + nrLDPC_cnProc_BG2_Z4_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z4_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 3: + { + nrLDPC_cnProc_BG2_Z3_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z3_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 2: + { + nrLDPC_cnProc_BG2_Z2_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z2_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + }//end switch(Z) + } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif @@ -1305,7 +2060,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP // nrLDPC_cnProc_BG1_Z64_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); break; } - + case 60: { nrLDPC_cnProc_BG1_Z60_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); @@ -1507,8 +2262,354 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP } else { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); - } + // nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + // depend on Z + switch (Z) + { + case 384: + { + nrLDPC_cnProc_BG2_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 352: + { + nrLDPC_cnProc_BG2_Z352_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z352_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 320: + { + nrLDPC_cnProc_BG2_Z320_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z320_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + + case 288: + { + nrLDPC_cnProc_BG2_Z288_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z288_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 256: + { + nrLDPC_cnProc_BG2_Z256_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //LDPC_cnProc_BG2_Z256_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 240: + { + + nrLDPC_cnProc_BG2_Z240_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z240_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 224: + { + + nrLDPC_cnProc_BG2_Z224_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG2_Z224_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 208: + { + nrLDPC_cnProc_BG2_Z208_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z208_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 192: + { + nrLDPC_cnProc_BG2_Z192_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z192_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 176: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 160: + { + nrLDPC_cnProc_BG2_Z176_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z176_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 144: + { + nrLDPC_cnProc_BG2_Z144_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z144_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 128: + { + nrLDPC_cnProc_BG2_Z128_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z128_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 120: + { + nrLDPC_cnProc_BG2_Z120_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z120_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 112: + { + nrLDPC_cnProc_BG2_Z112_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z112_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + case 104: + { + nrLDPC_cnProc_BG2_Z104_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z104_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 96: + { + nrLDPC_cnProc_BG2_Z96_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z96_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 88: + { + nrLDPC_cnProc_BG2_Z88_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z88_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 80: + { + nrLDPC_cnProc_BG2_Z80_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z80_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + + + case 72: + { + nrLDPC_cnProc_BG2_Z72_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z72_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 64: + { + nrLDPC_cnProc_BG2_Z64_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z64_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 60: + { + nrLDPC_cnProc_BG2_Z60_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z60_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 56: + { + nrLDPC_cnProc_BG2_Z56_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z56_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + + } + case 52: + { + nrLDPC_cnProc_BG2_Z52_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z52_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 48: + { + nrLDPC_cnProc_BG2_Z48_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z48_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 44: + { + nrLDPC_cnProc_BG2_Z44_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z44_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 40: + { + nrLDPC_cnProc_BG2_Z40_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z40_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 36: + { + nrLDPC_cnProc_BG2_Z36_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z36_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 32: + { + nrLDPC_cnProc_BG2_Z32_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z32_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 30: + { + nrLDPC_cnProc_BG2_Z30_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z30_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 28: + { + nrLDPC_cnProc_BG2_Z28_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z28_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 26: + { + nrLDPC_cnProc_BG2_Z26_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z26_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 24: + { + nrLDPC_cnProc_BG2_Z24_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z24_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 22: + { + nrLDPC_cnProc_BG2_Z22_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z22_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 20: + { + nrLDPC_cnProc_BG2_Z20_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z20_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 18: + { + nrLDPC_cnProc_BG2_Z18_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z18_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 16: + { + nrLDPC_cnProc_BG2_Z16_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z16_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 15: + { + nrLDPC_cnProc_BG2_Z15_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z15_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 14: + { + nrLDPC_cnProc_BG2_Z14_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z14_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 13: + { + nrLDPC_cnProc_BG2_Z13_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z13_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 12: + { + nrLDPC_cnProc_BG2_Z12_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z12_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 11: + { + nrLDPC_cnProc_BG2_Z11_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z11_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 10: + { + nrLDPC_cnProc_BG2_Z10_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z10_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 9: + { + nrLDPC_cnProc_BG2_Z9_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z9_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 8: + { + nrLDPC_cnProc_BG2_Z8_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z8_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 7: + { + nrLDPC_cnProc_BG2_Z7_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z7_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 6: + { + nrLDPC_cnProc_BG2_Z6_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z6_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + + case 5: + { + nrLDPC_cnProc_BG2_Z5_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z5_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 4: + { + nrLDPC_cnProc_BG2_Z4_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z4_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 3: + { + nrLDPC_cnProc_BG2_Z3_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z3_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + case 2: + { + nrLDPC_cnProc_BG2_Z2_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + // nrLDPC_cnProc_BG2_Z2_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + break; + } + }//end switch(Z) + } + #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile index abb9f8fd2f..5f58a090ec 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile @@ -24,4 +24,4 @@ mrproper: clean @rm -rf $(EXEC) zip: - @tar -zcvf sauvegarde.tar.gz main.c cnProc_gen_avx2.c cnProc_gen_avx2.h Makefile + @tar -zcvf sauvegarde.tar.gz main.c cnProc_gen_BG1_avx2.c cnProc_gen_BG2_avx2.c Makefile diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c similarity index 100% rename from openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2.c rename to openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG2_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG2_avx2.c new file mode 100644 index 0000000000..01d25fb829 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG2_avx2.c @@ -0,0 +1,425 @@ +#include +#include +#include "../../nrLDPCdecoder_defs.h" +#include "../../nrLDPC_types.h" +#include "../../nrLDPC_bnProc.h" + + +void nrLDPC_cnProc_BG2_generator_AVX2(uint16_t Z,int R) +{ + const char *ratestr[3]={"13","23","89"}; + + if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} + + +// system("mkdir -p ldpc_gen_files/avx2"); + + char fname[50]; + sprintf(fname,"../ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z%d_%s_AVX2.c",Z,ratestr[R]); + FILE *fd=fopen(fname,"w"); + if (fd == NULL) {printf("Cannot create \n");abort();} + + fprintf(fd,"#include \n"); + fprintf(fd,"#include \n"); + fprintf(fd,"void nrLDPC_cnProc_BG2_Z%d_%s_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); + + const uint8_t* lut_numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG2; + + if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R15; + else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R13; + else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R23; + else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} + + + // Number of CNs in Groups + uint32_t M; + uint32_t j; + uint32_t k; + // Offset to each bit within a group in terms of 32 byte + uint32_t bitOffsetInGroup; + + // Offsets are in units of bitOffsetInGroup (1*384/32) + // const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; + + // ===================================================================== + // Process group with 3 BNs + fprintf(fd,"//Process group with 3 BNs\n"); + // LUT with offsets for bits that need to be processed + // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. + // Offsets are in units of bitOffsetInGroup + const uint8_t lut_idxCnProcG3[3][2] = {{72,144}, {0,144}, {0,72}}; + + + fprintf(fd," __m256i ymm0, min, sgn,ones,maxLLR;\n"); + fprintf(fd," ones = _mm256_set1_epi8((char)1);\n"); + fprintf(fd," maxLLR = _mm256_set1_epi8((char)127);\n"); + + if (lut_numCnInCnGroups[0] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[0]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<3; j++) + { + + fprintf(fd," for (int i=0;i<%d;i+=2) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + // 32 CNs of second BN + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)); + + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0]+1); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + // 32 CNs of second BN + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]+1); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)+1); + + fprintf(fd," }\n"); + } + } + + // ===================================================================== + // Process group with 4 BNs + fprintf(fd,"//Process group with 4 BNs\n"); + + // Offset is 20*384/32 = 240 + const uint16_t lut_idxCnProcG4[4][3] = {{240,480,720}, {0,480,720}, {0,240,720}, {0,240,480}}; + + if (lut_numCnInCnGroups[1] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[1]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[1]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<4; j++) + { + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + + // Loop over BNs + for (k=1; k<3; k++) + { + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][k]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + } + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + // ===================================================================== + // Process group with 5 BNs + fprintf(fd,"//Process group with 5 BNs\n"); + + // Offset is 9*384/32 = 108 + const uint16_t lut_idxCnProcG5[5][4] = {{108,216,324,432}, {0,216,324,432}, + {0,108,324,432}, {0,108,216,432}, {0,108,216,324}}; + + + + if (lut_numCnInCnGroups[2] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[2]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[2]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<5; j++) + { + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + + // Loop over BNs + for (k=1; k<4; k++) + { + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][k]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + } + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + // ===================================================================== + // Process group with 6 BNs + fprintf(fd,"//Process group with 6 BNs\n"); + // Offset is 3*384/32 = 36 + const uint16_t lut_idxCnProcG6[6][5] = {{36,72,108,144,180}, {0,72,108,144,180}, + {0,36,108,144,180}, {0,36,72,144,180}, + {0,36,72,108,180}, {0,36,72,108,144}}; + + + if (lut_numCnInCnGroups[3] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[3]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[3]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<6; j++) + { + + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + + // Loop over BNs + for (k=1; k<5; k++) + { + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][k]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + } + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + + // ===================================================================== + // Process group with 8 BNs + fprintf(fd,"//Process group with 8 BNs\n"); + // Offset is 2*384/32 = 24 + const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,120,144,168}, {0,48,72,96,120,144,168}, + {0,24,72,96,120,144,168}, {0,24,48,96,120,144,168}, + {0,24,48,72,120,144,168}, {0,24,48,72,96,144,168}, + {0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}}; + + + + + + + if (lut_numCnInCnGroups[4] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[4]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[4]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<8; j++) + { + + // Loop over CNs + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG8[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + // Loop over BNs + for (k=1; k<7; k++) + { + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG8[j][k]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + + } + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[4]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + // ===================================================================== + // Process group with 10 BNs + fprintf(fd,"//Process group with 10 BNs\n"); + + const uint8_t lut_idxCnProcG10[10][9] = {{24,48,72,96,120,144,168,192,216}, {0,48,72,96,120,144,168,192,216}, + {0,24,72,96,120,144,168,192,216}, {0,24,48,96,120,144,168,192,216}, + {0,24,48,72,120,144,168,192,216}, {0,24,48,72,96,144,168,192,216}, + {0,24,48,72,96,120,168,192,216}, {0,24,48,72,96,120,144,192,216}, + {0,24,48,72,96,120,144,168,216}, {0,24,48,72,96,120,144,168,192}}; + + + + + + if (lut_numCnInCnGroups[5] > 0) + { + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[5]*Z + 31)>>5; + + // Set the offset to each bit within a group in terms of 32 byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[5]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<10; j++) + { + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 32 CNs (first BN) + // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG10[j][0]); + // sgn = _mm256_sign_epi8(ones, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); + // min = _mm256_abs_epi8(ymm0); + fprintf(fd," min = _mm256_abs_epi8(ymm0);\n"); + + + // Loop over BNs + for (k=1; k<9; k++) + { + fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG10[j][k]); + + // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); + + // sgn = _mm256_sign_epi8(sgn, ymm0); + fprintf(fd," sgn = _mm256_sign_epi8(sgn, ymm0);\n"); + } + + // Store result + // min = _mm256_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + fprintf(fd,"}\n"); + fclose(fd); +}//end of the function nrLDPC_cnProc_BG2 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2 index 06ab2452c9..1d463e5c74 100644 Binary files a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2 and b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2 differ diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/main.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/main.c index d32e549cd3..590541a9e8 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/main.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/main.c @@ -5,6 +5,7 @@ #include "../../nrLDPC_bnProc.h" #define NB_Z 51 void nrLDPC_cnProc_BG1_generator_AVX2(uint16_t,int); +void nrLDPC_cnProc_BG2_generator_AVX2(uint16_t,int); int main() { uint16_t Z[NB_Z]={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,36,40,44,48,52,56,60,64,72,80,88,96,104,112,120,128,144,160,176,192,208,224,240,256,288,320,352,384}; @@ -13,6 +14,7 @@ int main() for(int i=0; i +#include +#include "../../nrLDPCdecoder_defs.h" +#include "../../nrLDPC_types.h" +#include "../../nrLDPC_bnProc.h" + +void nrLDPC_cnProc_BG2_generator_AVX512(uint16_t Z,int R) +{ + const char *ratestr[3]={"13","23","89"}; + + if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} + + + // system("mkdir -p ../ldpc_gen_files"); + + char fname[50]; + sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG2_Z%d_%s_AVX512.c",Z,ratestr[R]); + FILE *fd=fopen(fname,"w"); + if (fd == NULL) {printf("Cannot create \n");abort();} + + fprintf(fd,"#include \n"); + fprintf(fd,"#include \n"); + + + fprintf(fd, "__m512i _mm512_sign_epi16(__m512i a, __m512i b){ \n"); /* Emulate _mm512_sign_epi16() with instructions that exist in the AVX-512 instruction set */ + fprintf(fd, "b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); \n" ); + fprintf(fd, "b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); \n" ); + fprintf(fd, " a = _mm512_mullo_epi16(a, b);\n"); + fprintf(fd, "return a;\n"); + fprintf(fd, "}\n" ); + + + fprintf(fd,"void nrLDPC_cnProc_BG2_Z%d_%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); + + const uint8_t* lut_numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG2; + + if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R15; + else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R13; + else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG2_R23; + else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} + + //__m512i* p_cnProcBuf; + //__m512i* p_cnProcBufRes; + + // Number of CNs in Groups + uint32_t M; + uint32_t j; + uint32_t k; + // Offset to each bit within a group in terms of 64 Byte + uint32_t bitOffsetInGroup; + + //__m512i zmm0, min, sgn; + //__m512i* p_cnProcBufResBit; + + // const __m512i* p_ones = (__m512i*) ones256_epi8; + // const __m512i* p_maxLLR = (__m512i*) maxLLR256_epi8; + + + + // ===================================================================== + // Process group with 3 BNs + fprintf(fd,"//Process group with 3 BNs\n"); + // LUT with offsets for bits that need to be processed + // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. + // Offsets are in units of bitOffsetInGroup (1*384/64)=6 + // Offsets are in units of bitOffsetInGroup + const uint8_t lut_idxCnProcG3[3][2] = {{36,72}, {0,72}, {0,36}}; + + + fprintf(fd," __m512i zmm0, min, sgn,ones,maxLLR;\n"); + fprintf(fd," ones = _mm512_set1_epi8((char)1);\n"); + fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); + + if (lut_numCnInCnGroups[0] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[0]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX)>>5; + + + // Set pointers to start of group 3 + //p_cnProcBuf = (__m512i*) &cnProcBuf [lut_startAddrCnGroups[0]]; + //p_cnProcBufRes = (__m512i*) &cnProcBufRes[lut_startAddrCnGroups[0]]; + + // Loop over every BN + + for (j=0; j<3; j++) + { + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + + // Loop over CNs + // for (i=0; i>5)+lut_idxCnProcG3[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + // 32 CNs of second BN + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)); + + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0]+1); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + // 32 CNs of second BN + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]+1); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)+1); + + fprintf(fd," }\n"); + } + } + + // ===================================================================== + // Process group with 4 BNs + fprintf(fd,"//Process group with 4 BNs\n"); + // Offset is 20*384/64 = 120 + const uint16_t lut_idxCnProcG4[4][3] = {{120,240,360}, {0,240,360}, {0,120,360}, {0,120,240}}; + + if (lut_numCnInCnGroups[1] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[1]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[1]*NR_LDPC_ZMAX)>>5; + + + // Set pointers to start of group 4 + //p_cnProcBuf = (__m512i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m512i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + + // Loop over every BN + for (j=0; j<4; j++) + { + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + + // Loop over BNs + for (k=1; k<3; k++) + { + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][k]); + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + + } + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + // ===================================================================== + // Process group with 5 BNs + fprintf(fd,"//Process group with 5 BNs\n"); + // Offset is 18*384/64 = 216 + const uint16_t lut_idxCnProcG5[5][4] = {{54,108,162,216}, {0,108,162,216}, + {0,54,162,216}, {0,54,108,216}, {0,54,108,162}}; + + + if (lut_numCnInCnGroups[2] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[2]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[2]*NR_LDPC_ZMAX)>>5; + + // Loop over every BN + + for (j=0; j<5; j++) + { + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + + // Loop over BNs + for (k=1; k<4; k++) + { + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][k]); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + } + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + // ===================================================================== + // Process group with 6 BNs + fprintf(fd,"//Process group with 6 BNs\n"); + // Offset is 3*384/64 = 18 + const uint16_t lut_idxCnProcG6[6][5] = {{18,36,54,72,90}, {0,36,54,72,90}, + {0,18,54,72,90}, {0,18,36,72,90}, + {0,18,36,54,90}, {0,18,36,54,72}}; + + + if (lut_numCnInCnGroups[3] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[3]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[3]*NR_LDPC_ZMAX)>>5; + + + // Set pointers to start of group 4 + //p_cnProcBuf = (__m512i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m512i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + + // Loop over every BN + + for (j=0; j<6; j++) + { + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + + // Loop over BNs + for (k=1; k<5; k++) + { + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][k]); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + } + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + // ===================================================================== + // Process group with 8 BNs + fprintf(fd,"//Process group with 8 BNs\n"); + + // Offset is 2*384/64 = 12 + const uint8_t lut_idxCnProcG8[8][7] = {{12,24,36,48,60,72,84}, {0,24,36,48,60,72,84}, + {0,12,36,48,60,72,84}, {0,12,24,48,60,72,84}, + {0,12,24,36,60,72,84}, {0,12,24,36,48,72,84}, + {0,12,24,36,48,60,84}, {0,12,24,36,48,60,72}}; + + + if (lut_numCnInCnGroups[5] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[5]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[5]*NR_LDPC_ZMAX)>>5; + + + // Set pointers to start of group 4 + //p_cnProcBuf = (__m512i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m512i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + + // Loop over every BN + + for (j=0; j<8; j++) + { + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + + // Loop over BNs + for (k=1; k<7; k++) + { + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][k]); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + } + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + // ===================================================================== + // Process group with 10 BNs + fprintf(fd,"//Process group with 10 BNs\n"); + // Offset is 2*384/64 = 12 + const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, + {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, + {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, + {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, + {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,144,84,96}}; + + + + + + if (lut_numCnInCnGroups[7] > 0) + { + // Number of groups of 64 CNs for parallel processing + // Ceil for values not divisible by 64 + M = (lut_numCnInCnGroups[7]*Z + 63)>>5; + + // Set the offset to each bit within a group in terms of 64 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[7]*NR_LDPC_ZMAX)>>5; + + + // Set pointers to start of group 10 + //p_cnProcBuf = (__m512i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m512i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + + // Loop over every BN + + for (j=0; j<10; j++) + { + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + + // Loop over CNs + + fprintf(fd," for (int i=0;i<%d;i++) {\n",M); + // Abs and sign of 64 CNs (first BN) + // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][0]); + // sgn = _mm512_sign_epi16(ones, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + // min = _mm512_abs_epi8(zmm0); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + + + // Loop over BNs + for (k=1; k<9; k++) + { + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][k]); + + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi16(sgn, zmm0); + fprintf(fd," sgn = _mm512_sign_epi16(sgn, zmm0);\n"); + } + + // Store result + // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); + // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); + // p_cnProcBufResBit++; + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[7]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," }\n"); + } + } + + + + fprintf(fd,"}\n"); + fclose(fd); +}//end of the function nrLDPC_cnProc_BG2 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 index 1954723c1d..776516a4d7 100644 Binary files a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 and b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 differ diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/main.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/main.c index 99983a1ad0..be52b9698c 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/main.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/main.c @@ -6,6 +6,7 @@ #include "../../nrLDPC_bnProc.h" #define NB_Z 51 void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t,int); +void nrLDPC_cnProc_BG2_generator_AVX512(uint16_t,int); int main() { uint16_t Z[NB_Z]={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,36,40,44,48,52,56,60,64,72,80,88,96,104,112,120,128,144,160,176,192,208,224,240,256,288,320,352,384}; @@ -14,6 +15,7 @@ int main() for(int i=0; i #include - void nrLDPC_cnProc_BG1_Z384_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { //Process group with 3 BNs __m256i ymm0, min, sgn,ones,maxLLR; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z104_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z104_13_AVX2.c new file mode 100644 index 0000000000..1e53c0b419 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z104_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z104_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<20;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<65;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<65;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<65;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<65;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z10_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z10_13_AVX2.c new file mode 100644 index 0000000000..f21b79d1ed --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z10_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z10_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z112_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z112_13_AVX2.c new file mode 100644 index 0000000000..7b79cfed9a --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z112_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z112_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<21;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<70;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<70;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<70;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<70;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<32;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<32;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<32;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<32;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<32;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z11_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z11_13_AVX2.c new file mode 100644 index 0000000000..6d5d48e2a8 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z11_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z11_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z120_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z120_13_AVX2.c new file mode 100644 index 0000000000..0b2f5c8b90 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z120_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z120_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<23;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<75;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<75;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<75;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<75;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<34;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<34;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<34;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<34;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<34;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z128_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z128_13_AVX2.c new file mode 100644 index 0000000000..f91551d026 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z128_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z128_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<24;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<80;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<80;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<80;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<80;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z12_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z12_13_AVX2.c new file mode 100644 index 0000000000..1d1969a66d --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z12_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z12_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z13_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z13_13_AVX2.c new file mode 100644 index 0000000000..54b1113528 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z13_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z13_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z144_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z144_13_AVX2.c new file mode 100644 index 0000000000..0d7a5f6ced --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z144_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z144_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<27;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<41;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<41;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<41;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<41;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<41;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z14_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z14_13_AVX2.c new file mode 100644 index 0000000000..9c393a67e8 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z14_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z14_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z15_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z15_13_AVX2.c new file mode 100644 index 0000000000..2200509e3e --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z15_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z15_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z160_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z160_13_AVX2.c new file mode 100644 index 0000000000..8c697a8039 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z160_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z160_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<30;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<100;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<100;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<100;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<100;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z16_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z16_13_AVX2.c new file mode 100644 index 0000000000..6077b55309 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z16_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z16_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z176_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z176_13_AVX2.c new file mode 100644 index 0000000000..4d0707402d --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z176_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z176_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<33;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<110;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<110;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<110;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<110;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z18_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z18_13_AVX2.c new file mode 100644 index 0000000000..e0c495901b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z18_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z18_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z192_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z192_13_AVX2.c new file mode 100644 index 0000000000..71cde9a4c9 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z192_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z192_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<36;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<120;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<120;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<120;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<120;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<54;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z208_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z208_13_AVX2.c new file mode 100644 index 0000000000..f2d8b336c9 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z208_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z208_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<39;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<39;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<39;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<130;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<130;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<130;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<130;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<59;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<59;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<59;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<59;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<59;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z20_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z20_13_AVX2.c new file mode 100644 index 0000000000..e6a6d9f2ba --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z20_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z20_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z224_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z224_13_AVX2.c new file mode 100644 index 0000000000..149794c311 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z224_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z224_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<42;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<42;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<42;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<140;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<140;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<140;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<140;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<63;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<63;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<63;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<63;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<63;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z22_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z22_13_AVX2.c new file mode 100644 index 0000000000..038f86a4f3 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z22_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z22_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z240_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z240_13_AVX2.c new file mode 100644 index 0000000000..37ff84092c --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z240_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z240_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<45;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<150;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<150;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<150;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<150;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<68;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<68;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<68;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<68;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<68;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z24_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z24_13_AVX2.c new file mode 100644 index 0000000000..12d647ce67 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z24_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z24_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z256_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z256_13_AVX2.c new file mode 100644 index 0000000000..ce740c10d3 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z256_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z256_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<48;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<48;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<48;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<160;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<160;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<160;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<160;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<72;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z26_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z26_13_AVX2.c new file mode 100644 index 0000000000..78b32626a5 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z26_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z26_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z288_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z288_13_AVX2.c new file mode 100644 index 0000000000..d435c23a2e --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z288_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z288_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<54;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<54;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<180;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<180;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<180;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<180;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<81;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<81;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<81;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<81;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<81;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z28_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z28_13_AVX2.c new file mode 100644 index 0000000000..2711bc1b28 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z28_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z28_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z2_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z2_13_AVX2.c new file mode 100644 index 0000000000..9506ba9d3a --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z2_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z2_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z30_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z30_13_AVX2.c new file mode 100644 index 0000000000..926101fc85 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z30_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z30_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<19;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<19;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<19;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<19;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z320_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z320_13_AVX2.c new file mode 100644 index 0000000000..2d849aa333 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z320_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z320_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<60;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<60;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<60;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<200;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<200;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<200;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<200;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<90;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z32_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z32_13_AVX2.c new file mode 100644 index 0000000000..d2943f6e51 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z32_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z32_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<20;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z352_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z352_13_AVX2.c new file mode 100644 index 0000000000..1e41cb092d --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z352_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z352_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<66;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<66;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<66;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<220;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<220;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<220;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<220;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<99;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<99;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<99;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<99;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<99;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<22;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z36_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z36_13_AVX2.c new file mode 100644 index 0000000000..8444317af6 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z36_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z36_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<7;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z384_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z384_13_AVX2.c new file mode 100644 index 0000000000..e4e671b5c7 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z384_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z384_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<72;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<72;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<240;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<240;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<240;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<240;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<108;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<108;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<108;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<108;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<108;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<36;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<24;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z3_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z3_13_AVX2.c new file mode 100644 index 0000000000..bcb39f8809 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z3_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z3_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z40_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z40_13_AVX2.c new file mode 100644 index 0000000000..c077b8b93a --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z40_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z40_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<8;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z44_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z44_13_AVX2.c new file mode 100644 index 0000000000..ff9292d65c --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z44_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z44_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<28;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<28;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<28;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<28;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<13;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z48_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z48_13_AVX2.c new file mode 100644 index 0000000000..b5d8c35f49 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z48_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z48_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<30;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z4_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z4_13_AVX2.c new file mode 100644 index 0000000000..adde2b472b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z4_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z4_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z52_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z52_13_AVX2.c new file mode 100644 index 0000000000..0140bbab21 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z52_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z52_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<10;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<10;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<33;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z56_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z56_13_AVX2.c new file mode 100644 index 0000000000..0a7cc1a0d8 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z56_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z56_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<11;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<11;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<35;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<35;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<35;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<35;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<16;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z5_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z5_13_AVX2.c new file mode 100644 index 0000000000..7e911a2c2d --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z5_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z5_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z60_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z60_13_AVX2.c new file mode 100644 index 0000000000..0f831b82de --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z60_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z60_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<38;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<38;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<38;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<38;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z64_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z64_13_AVX2.c new file mode 100644 index 0000000000..084798cd21 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z64_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z64_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<12;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<40;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<40;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<40;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<40;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z6_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z6_13_AVX2.c new file mode 100644 index 0000000000..91be774147 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z6_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z6_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<4;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z72_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z72_13_AVX2.c new file mode 100644 index 0000000000..20477549de --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z72_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z72_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<14;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<14;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<45;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<21;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<7;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z7_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z7_13_AVX2.c new file mode 100644 index 0000000000..3b22c5e125 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z7_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z7_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z80_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z80_13_AVX2.c new file mode 100644 index 0000000000..14fb4d0a7c --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z80_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z80_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<15;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<15;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<50;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<23;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<8;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z88_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z88_13_AVX2.c new file mode 100644 index 0000000000..25bbcb50d2 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z88_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z88_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<17;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<17;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<55;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<55;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<55;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<55;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<25;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z8_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z8_13_AVX2.c new file mode 100644 index 0000000000..cadca0e876 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z8_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z8_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<5;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z96_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z96_13_AVX2.c new file mode 100644 index 0000000000..1ca757bfa7 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z96_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z96_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<18;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<18;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<60;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<60;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<60;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<60;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<27;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<9;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z9_13_AVX2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z9_13_AVX2.c new file mode 100644 index 0000000000..b0dc4d483b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/avx2/nrLDPC_cnProc_BG2_Z9_13_AVX2.c @@ -0,0 +1,823 @@ +#include +#include +void nrLDPC_cnProc_BG2_Z9_13_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[0+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[144+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[72+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[145+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[73+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<2;i+=2) { + ymm0 = ((__m256i*)cnProcBuf)[0+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[72+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[144+i] = _mm256_sign_epi8(min, sgn); + ymm0 = ((__m256i*)cnProcBuf)[1+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[73+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[145+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[216+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[456+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[936+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[696+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<6;i++) { + ymm0 = ((__m256i*)cnProcBuf)[216+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[456+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[696+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[936+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1176+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1284+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1392+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1608+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1500+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<3;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1176+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1284+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1392+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1500+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1608+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1716+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1752+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1788+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1824+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1896+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1860+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1716+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1752+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1788+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1824+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1860+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1896+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1932+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1956+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[1980+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2004+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2028+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2052+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2100+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2076+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[1932+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1956+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[1980+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2004+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2028+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2052+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2076+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2100+i] = _mm256_sign_epi8(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2124+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2148+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2172+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2196+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2220+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2244+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2268+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2292+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2340+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2316+i] = _mm256_sign_epi8(min, sgn); + } + for (int i=0;i<1;i++) { + ymm0 = ((__m256i*)cnProcBuf)[2124+i]; + sgn = _mm256_sign_epi8(ones, ymm0); + min = _mm256_abs_epi8(ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2148+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2172+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2196+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2220+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2244+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2268+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2292+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + ymm0 = ((__m256i*)cnProcBuf)[2316+i]; + min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); + sgn = _mm256_sign_epi8(sgn, ymm0); + min = _mm256_min_epu8(min, maxLLR); + ((__m256i*)cnProcBufRes)[2340+i] = _mm256_sign_epi8(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z104_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z104_13_AVX512.c new file mode 100644 index 0000000000..028fc8acd6 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z104_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z104_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<21;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<66;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<66;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<66;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<66;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<27;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z10_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z10_13_AVX512.c new file mode 100644 index 0000000000..454c57bde2 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z10_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z10_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z112_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z112_13_AVX512.c new file mode 100644 index 0000000000..471c209c13 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z112_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z112_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<22;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<71;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<71;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<71;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<71;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z11_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z11_13_AVX512.c new file mode 100644 index 0000000000..7bdaecb163 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z11_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z11_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z120_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z120_13_AVX512.c new file mode 100644 index 0000000000..f27234e514 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z120_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z120_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<24;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<76;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<76;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<76;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<76;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<35;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<35;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<35;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<35;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<35;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z128_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z128_13_AVX512.c new file mode 100644 index 0000000000..ed82005362 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z128_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z128_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<25;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<33;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z12_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z12_13_AVX512.c new file mode 100644 index 0000000000..4a6f4e84c7 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z12_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z12_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z13_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z13_13_AVX512.c new file mode 100644 index 0000000000..fddad47a3a --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z13_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z13_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z144_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z144_13_AVX512.c new file mode 100644 index 0000000000..53fc972914 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z144_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z144_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<28;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<42;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<42;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<42;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<42;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<42;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z14_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z14_13_AVX512.c new file mode 100644 index 0000000000..c335d28ea0 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z14_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z14_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z15_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z15_13_AVX512.c new file mode 100644 index 0000000000..f03c575141 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z15_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z15_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z160_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z160_13_AVX512.c new file mode 100644 index 0000000000..6a4d58f191 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z160_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z160_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<31;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<101;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<101;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<101;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<101;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z16_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z16_13_AVX512.c new file mode 100644 index 0000000000..bd10af445e --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z16_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z16_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z176_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z176_13_AVX512.c new file mode 100644 index 0000000000..55e116b51f --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z176_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z176_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<34;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<111;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<111;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<111;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<111;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<45;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z18_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z18_13_AVX512.c new file mode 100644 index 0000000000..712ec87469 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z18_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z18_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z192_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z192_13_AVX512.c new file mode 100644 index 0000000000..eda5b6a463 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z192_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z192_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<37;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<121;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<121;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<121;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<121;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<55;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z208_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z208_13_AVX512.c new file mode 100644 index 0000000000..9a1081c951 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z208_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z208_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<40;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<40;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<40;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<131;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<131;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<131;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<131;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<60;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<60;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<60;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<60;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<60;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<53;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z20_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z20_13_AVX512.c new file mode 100644 index 0000000000..7a42b26ad1 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z20_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z20_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z224_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z224_13_AVX512.c new file mode 100644 index 0000000000..1863faff1c --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z224_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z224_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<43;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<43;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<43;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<141;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<141;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<141;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<141;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<64;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<64;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<64;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<64;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<64;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<57;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z22_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z22_13_AVX512.c new file mode 100644 index 0000000000..fc8ec65f5b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z22_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z22_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z240_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z240_13_AVX512.c new file mode 100644 index 0000000000..7c2b22ab84 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z240_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z240_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<46;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<151;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<151;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<151;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<151;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<69;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<69;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<69;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<69;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<69;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z24_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z24_13_AVX512.c new file mode 100644 index 0000000000..a7e29917dc --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z24_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z24_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z256_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z256_13_AVX512.c new file mode 100644 index 0000000000..8467ccc0ef --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z256_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z256_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<49;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<49;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<161;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<161;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<161;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<161;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<65;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z26_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z26_13_AVX512.c new file mode 100644 index 0000000000..dd9c501e23 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z26_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z26_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z288_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z288_13_AVX512.c new file mode 100644 index 0000000000..080ef69200 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z288_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z288_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<55;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<55;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<181;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<181;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<181;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<181;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<82;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<82;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<82;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<82;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<82;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z28_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z28_13_AVX512.c new file mode 100644 index 0000000000..04a81d12e9 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z28_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z28_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z2_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z2_13_AVX512.c new file mode 100644 index 0000000000..6fd089c473 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z2_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z2_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z30_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z30_13_AVX512.c new file mode 100644 index 0000000000..8a67896e39 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z30_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z30_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<20;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<20;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<20;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<20;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z320_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z320_13_AVX512.c new file mode 100644 index 0000000000..5e1acf0903 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z320_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z320_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<61;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<201;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<201;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<201;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<201;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<91;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<81;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z32_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z32_13_AVX512.c new file mode 100644 index 0000000000..14ce05ac0b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z32_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z32_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z352_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z352_13_AVX512.c new file mode 100644 index 0000000000..35c1a730e8 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z352_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z352_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<67;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<67;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<67;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<221;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<221;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<221;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<221;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<100;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<100;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<100;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<100;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<100;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<89;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z36_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z36_13_AVX512.c new file mode 100644 index 0000000000..be02e00e7f --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z36_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z36_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<8;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z384_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z384_13_AVX512.c new file mode 100644 index 0000000000..22e55f4543 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z384_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z384_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<73;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<73;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<241;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<241;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<241;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<241;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<109;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<109;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<109;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<109;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<109;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<37;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<97;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z3_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z3_13_AVX512.c new file mode 100644 index 0000000000..f2752744e3 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z3_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z3_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z40_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z40_13_AVX512.c new file mode 100644 index 0000000000..3d49278c3d --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z40_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z40_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<9;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z44_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z44_13_AVX512.c new file mode 100644 index 0000000000..9bff5a5d51 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z44_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z44_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<29;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z48_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z48_13_AVX512.c new file mode 100644 index 0000000000..73ff170732 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z48_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z48_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<31;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z4_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z4_13_AVX512.c new file mode 100644 index 0000000000..174556650b --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z4_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z4_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z52_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z52_13_AVX512.c new file mode 100644 index 0000000000..4425d37550 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z52_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z52_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<11;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<11;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<34;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<14;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z56_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z56_13_AVX512.c new file mode 100644 index 0000000000..34476031c1 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z56_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z56_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<12;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<12;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<36;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<36;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<36;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<36;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z5_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z5_13_AVX512.c new file mode 100644 index 0000000000..4f780cfa67 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z5_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z5_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z60_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z60_13_AVX512.c new file mode 100644 index 0000000000..d102d9cda6 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z60_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z60_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<39;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<39;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<39;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<39;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z64_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z64_13_AVX512.c new file mode 100644 index 0000000000..649ce55fa0 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z64_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z64_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<13;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<41;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<17;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z6_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z6_13_AVX512.c new file mode 100644 index 0000000000..194c559442 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z6_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z6_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<5;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z72_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z72_13_AVX512.c new file mode 100644 index 0000000000..fd82e34130 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z72_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z72_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<15;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<15;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<46;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<22;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<8;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z7_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z7_13_AVX512.c new file mode 100644 index 0000000000..0c6b156921 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z7_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z7_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z80_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z80_13_AVX512.c new file mode 100644 index 0000000000..2d6c7477bd --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z80_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z80_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<16;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<16;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<51;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<24;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<9;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<21;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z88_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z88_13_AVX512.c new file mode 100644 index 0000000000..6a639f9cb4 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z88_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z88_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<18;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<18;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<56;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<56;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<56;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<56;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<26;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<23;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z8_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z8_13_AVX512.c new file mode 100644 index 0000000000..8b3b9f9183 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z8_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z8_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<6;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z96_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z96_13_AVX512.c new file mode 100644 index 0000000000..63631b39b4 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z96_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z96_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<19;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<19;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<61;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<28;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<10;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<25;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z9_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z9_13_AVX512.c new file mode 100644 index 0000000000..b19f2afe39 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG2_Z9_13_AVX512.c @@ -0,0 +1,829 @@ +#include +#include +__m512i _mm512_sign_epi16(__m512i a, __m512i b){ +b = _mm512_min_epi16(b, _mm512_set1_epi16(1)); +b = _mm512_max_epi16(b, _mm512_set1_epi16(-1)); + a = _mm512_mullo_epi16(a, b); +return a; +} +void nrLDPC_cnProc_BG2_Z9_13_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) { +//Process group with 3 BNs + __m512i zmm0, min, sgn,ones,maxLLR; + ones = _mm512_set1_epi8((char)1); + maxLLR = _mm512_set1_epi8((char)127); + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[72+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[72+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[73+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[73+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<3;i+=2) { + zmm0 = ((__m512i*)cnProcBuf)[0+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[36+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[144+i] = _mm512_sign_epi16(min, sgn); + zmm0 = ((__m512i*)cnProcBuf)[1+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[37+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[145+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 4 BNs + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[456+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[576+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[696+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<7;i++) { + zmm0 = ((__m512i*)cnProcBuf)[216+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[336+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[456+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[936+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 5 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1176+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1284+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1392+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1500+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1176+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1230+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1338+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1608+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 6 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1716+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1752+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1788+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1824+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1806+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1860+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[1716+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1734+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1752+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1770+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1788+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[1896+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 8 BNs + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2124+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2148+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2196+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2220+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2244+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2208+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2268+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<2;i++) { + zmm0 = ((__m512i*)cnProcBuf)[2124+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2136+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2148+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2160+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2172+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2184+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[2196+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + } +//Process group with 10 BNs + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261448+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261484+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } + for (int i=0;i<4;i++) { + zmm0 = ((__m512i*)cnProcBuf)[5261376+i]; + sgn = _mm512_sign_epi16(ones, zmm0); + min = _mm512_abs_epi8(zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261388+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261400+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261412+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261424+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261436+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261520+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261460+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[5261472+i]; + min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + sgn = _mm512_sign_epi16(sgn, zmm0); + min = _mm512_min_epu8(min, maxLLR); + ((__m512i*)cnProcBufRes)[5261376+i] = _mm512_sign_epi16(min, sgn); + } +}